【问题标题】:Primary Key for Realm BD SwiftRealm BD Swift 的主键
【发布时间】:2021-04-26 12:18:19
【问题描述】:

我正在尝试通过使用主键来重命名数据库中的值:

var arrayKeys = ["608477babe8015e2e64eff96", "608488ac638dd4f4f24362de"]
for i in arrayKeys {
    realm.create(NameFolderClass.self, value: ["_id": i, "nameFolder": nameFolderField.text!], update: .modified)
self.tableView1.reloadData()
}

错误:

Thread 1: "Invalid value '608477babe8015e2e64eff96' of type 'Swift.__StringStorage' for 'object id' property 'NameFolderClass._id'."

当我在“id_”中放置一个没有循环的单独密钥时:“608477babe8015e2e64eff96” - 不起作用。当我写“id_”时:self. nameFolderClass[indexPath.排]。 _id-然后就可以了。

PrimaryKey 有一个 String 类型

如果可以有两个以上的值,我如何迭代这些值?

【问题讨论】:

    标签: swift realm


    【解决方案1】:
            let nameFolderField = alertController.textFields![0] as UITextField
            //Если nameFolderField больше 0, то записываем и обновляем Базу данных
            if nameFolderField.text!.count > 0 && nameFolderField.text != " " {
                //если в массиве уникальных папок нет вводимого текста:
                if self.uniqArrayNameFolder().contains(nameFolderField.text!) == false {
                    let aaa = realm.objects(NameFolderClass.self).filter("nameFolder = 'дом'")
                    //стараемся записать
                    try! self.realm.write {
                        for n in aaa {
                            realm.create(NameFolderClass.self, value: ["_id": n._id, "nameFolder": nameFolderField.text!], update: .modified)
                            self.tableView1.reloadData()
                        }
    

    我做到了!

    【讨论】:

    • 你有一个解决方案很好,但为了清楚起见,这个答案与问题或问题的原因无关。在您询问字符串数组的问题中;在这个答案中,您正在迭代领域结果中的一系列对象,这是两个完全不同的东西。问题中的问题是您的对象具有 ObjectId 类型的主键,而您的查询正试图将其转换为字符串;而在这个答案中,您从结果中的每个对象中获取 ObjectId 对象,然后使用该对象 - 这是有效的,因为它是相同的对象类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 2017-07-24
    • 1970-01-01
    • 2017-03-25
    • 2017-10-27
    • 2017-11-11
    • 1970-01-01
    相关资源
    最近更新 更多