ios - 返回实体中的随机属性(核心数据)

标签 ios swift database core-data

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)和所需时态(对 tenseLabel.text)来测试用户的变位。目标是让用户输入(到 userInput.text)该动词的变位形式,然后按下按钮 (checkAnswer) 来检查他们的答案。如果答案正确,将生成一个新的动词等。

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

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

为了解决这个问题,我尝试创建一个包含属性名称的数组,然后生成一个随机数,然后将属性名称附加到在 tenseLabel.text 中显示的获取请求,但 tenseLabel.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     
}

最佳答案

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/

相关文章:

database - 密码、盐、哈希、DB : For the millionth time

ios - 授权 header 在 NSMutableURLRequest 中不起作用

ios - 如何从 UITableView 中获取对象 ID 并根据对象 ID 删除对象?

ios - 如何在 RXSwift 中对两个公共(public)主题使用combineLatest

ios - Crashlytics 的非 fatal error 功能

php - SQL在将主键与where子句中的另一个值组合时返回空行

ios - Swift 错误 fatal error : unexpectedly found nil while unwrapping an Optional value

ios - 如何拦截从 CallKit 来电屏幕发送的 "Messages"?

ios - 访问 MKLocalSearch 响应项(快速)

database - 部署构建应用程序并将其连接到 Bluemix PaaS?