• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-11 18:27:12 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap