OGeek|极客世界-中国程序员成长平台

标题: ios - 返回实体中的随机属性(核心数据) [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 18:27
标题: ios - 返回实体中的随机属性(核心数据)

verbDatabase Table 我正在使用的数据如下以及上面的屏幕截图中:

+----+------------+------------+------------+
| id | infinitive | ind pre je | ind pre tu |
+----+------------+------------+------------+
|  1 | aimer      | aime       | aimes      |
|  2 | aller      | vais       | vas        |
|  3 | courir     | cours      | cours      |
|  4 | servir     | sers       | sers       |
|  5 | mourir     | meurs      | meurs      |
|  6 | dormir     | dors       | dors       |
|  7 | sentir     | sens       | sens       |
|  8 | vêtir      | vêts       | vêts       |
|  9 | fuir       | fuis       | fuis       |
| 10 | tenir      | tiens      | tiens      |
+----+------------+------------+------------+

我是编码新手,我正在开发一个法语变位应用程序,该应用程序通过显示不定式形式的动词(到 verbLabel.text)和所需的时态(到tensileLabel.text)来测试用户的变位。目标是让用户输入(到 userInput.text)那个动词的共轭形式,然后按下一个按钮(checkAnswer)来检查他们的答案。如果答案正确,则会生成一个新的动词,等等。

我有一个名为 verbDatabase 的 CoreData 实体,其属性名为 idinfinitiveindPreJe indPreTu

我设法生成了一个随机行(以显示一个随机动词),但我无法生成一个随机属性(indPreJe 或 indPreTu)。要生成随机属性并且因为属性名称必须以小写字母开头,我不能使用与生成随机行相同的方法。

为了解决这个问题,我尝试创建一个包含属性名称的数组,然后生成一个随机数,然后将属性名称附加到在tensileLabel.text中显示的获取请求中,但tensileLabel.text显示字符串 "verbDatabase[0].indPreJe" 而不是 verbDatabase[0].indPreJe 的值。

有没有办法让文本标​​签在附加随机属性名称而不是指向该值的字符串后显示该值?

如果我以低效的方式处理我的数据,是否有更好的方法将我的数据存储到 Core Data 中,让我能够更好地使用我正在尝试做的事情来访问它?我仍在尝试围绕核心数据结构。我还考虑将动词保存为单独的字典,时态作为键,共轭形式作为对应的值。

理想情况下,我希望能够允许用户选择他们想要测试的时态,并对动词进行分类——常规形式、不规则形式、常用动词等。

提前感谢您的帮助!

@IBOutlet weak var verbLabel: UILabel!
@IBOutlet weak var tenseLabel: UILabel!
@IBOutlet weak var userInput: UITextField!
@IBOutlet weak var textView: UITextView!
var currentRow: Int = 0
var countTenseColumns: Int = 2
var currentColumn: Int = 0
var columnNames = ["id","infinitive","indPreJe","indPreTu"]

@IBAction func checkAnswer(_ sender: Any) {

    if userInput.text == verbDatabase[currentRow].indPreTu {
        textView.text = "correct!"
        viewWillLayoutSubviews()
        userInput.text = nil
    }

    else {
     textView.text = "the correct answer is \(verbDatabase[currentRow].indPreTu ?? "error")"

    }
}

func randomNumberGeneratorRow() -> Int {
    //generates random number from 1 to verbDatabase.count
    return Int(arc4random_uniform(UInt32(verbDatabase.count)+1))
}

func randomNumberGeneratorColumn() -> Int {
    //generates random number from 2 to number of columns with tenses
    return Int(arc4random_uniform(UInt32(countTenseColumns)+2))
}

override func viewWillLayoutSubviews() {
    currentRow = self.randomNumberGeneratorRow()
    currentColumn = self.randomNumberGeneratorColumn()
    var columnName = "verbDatabase[0].\(columnNames[currentColumn])"

    verbLabel.text = verbDatabase[currentRow].infinitive
    tenseLabel.text = columnName     
}



Best Answer-推荐答案


Is there any way to get the text label to display the value after it has been appended with the random attribute name instead of the string points to that value?

是的,您可以使用 value(forKey(参见 the documentation here):

var columnName = columnNames[currentColumn]
tenseLabel.text = verbDatabase[currentRow].value(forKey:columnName)

关于ios - 返回实体中的随机属性(核心数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45535609/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4