我尝试在Realm中创建具有唯一id的对象。我使用以下代码:
class Persons: Object {
@objc dynamic var id = 0
@objc dynamic var name = ""
override static func primaryKey() -> String? {
return "id"
}
}
在我StorageManager中,我使用了以下代码:
import RealmSwift
let realm = try! Realm()
class StorageManager {
static func saveObject(_ person: Persons) {
try! realm.write {
realm.add(person)
}
}
static func deleteObject(_ person: Persons) {
try! realm.write {
realm.delete(person)
}
}
}
但是当我添加第二个新对象时,我得到错误:
由于未捕获的异常“RLMException”,正在终止应用程序,原因:正在尝试创建具有现有主键值“0”的“Persons”类型的对象。
如何为每个新对象获取新的唯一ID?
2条答案
按热度按时间aemubtdh1#
最好的办法是让代码为您定义它
UUID().uuidString返回一个唯一的字符串,非常适合作为主键。
但是
MongoDB领域是新产品,对象需要有一个名为_id的特定主键属性,该属性应该用领域ObjectID属性填充。
您可以在MongoDB领域入门指南中阅读更多相关内容
请注意,在RealmSwift 10.10.0之后,可以使用以下代码自动生成objectId
请记住,如果在对象上使用
@Persisted
,则需要使用@Persisted
定义“所有”领域托管属性请注意,如果使用@Persisted,则不需要
override static func primaryKey()
函数fcg9iug32#
自从Realm v10问世以来,更好的解决方案是使用专用的新objectID class