我正在一个iOS项目中工作,涉及Realm
和泛型的使用。我正在探索克隆克隆的Realm
对象的方法,以在写事务之外对其进行更新,然后使用泛型将其发送到更新函数。
我正面临一个奇怪的问题,我不知道它是否与Realm
或泛型相关。您的帮助将不胜感激
设置:
从GenericObject
Realm
继承的一个类Object
和一个名为Sale
的子类:
GenericObject: Object
Sale: Generic Object // This class includes a primary key called "id"
我从网络上获取了一个Sale
对象,并且能够将其保存在Realm
中,从而在写事务之外创建了一个新对象(我可以保存它而不必担心写事务,但是我想使用相同的代码和流程进行更新)
当我修改对象的属性并尝试更新Realm时,它会引发异常,因为找不到主键。 (primaryKey在子类Sale
中定义)
我已经能够按照以下方式将问题精确定位到newItem()
中的Sale
方法中:
override func newItem<T:GenericObject>(ofType itemType: T.Type) -> T {
let dictionary = self.getDictionary()
let newItem = T.init()
newItem.updateWithDictionary(dict: dictionary)
print("Type: \(type(of: newItem)) - Object: \(newItem)")
return newItem
}
然后,我将其称为:
let newObject = object.newItem(ofType: Sale.self)
self.realm.add(newObject, update: true)
到目前为止,太好了。我从网络上检索对象,并且可以正常工作。 print()
报告type(of:)
的实例化对象是Sale
,并且该对象的打印输出还显示Sale
Type: Sale - Object: Sale { ....
当我更新并保存对象时,它无法说Realm
找不到主键,type(of:)
报告了Sale
,但是实例被打印为{{1 }}超类,如下所示:
GenericObject
此结果运行相同的代码并执行相同的代码。我正在将Xcode 10和Swift 4.2与Realm 3一起使用 知道这里可能发生什么吗?
答案 0 :(得分:0)
六个月后,问题似乎已经解决,而没有清楚说明正在发生什么。
截至2019年4月22日,已迁移到Realm 3.14.1,Xcode 10.2.1和Swift 5.0,我能够使用T.init()获取对象的克隆,并将其成功保存到领域使用我发布问题时使用的原始代码编写事务
我没有看到任何与从Swift 4.2到5.0的语法更改相关的信息,但是我知道Xcode 10.2.1包括对LLVM / clang的更新。
我很想花一些时间检查以前Realm版本的新编译器