我发现我认为是好的库CoreStore,因为我们看到它们提供了导入和唯一导入,以及在可导入协议后面的映射功能,我们需要在NSManagedObject
对象子类中实现这些协议才能设置属性。
我的问题是有文档如何正确映射关系?例如,如果我有一个Person
和多个地址,我是否需要使用 Person NSManagedObject 的相同 didInsert 函数并执行如下异步事务:
func didInsert(from source: ImportSource, in transaction: BaseDataTransaction) throws {
let addresses = source["addresses"] as? [[String: Any]] // array of dict.
for address in addresses {
CoreStore.perform(
asynchronous: { (transaction) -> Void in
let json: [String: Any] = // ...
try! transaction.importUniqueObject(
Into<AddressEntity>(),
source: address
)
// ...
},
completion: { _ in }
)
}
}
我是否需要异步或同步以及其他问题如何触发即使所有关系都已导入或 CoreStore 自动执行,或者我可能走错了路,还有其他一些漂亮的解决方案。
谢谢
正如马丁建议的那样,我添加了类似的内容:
if let addressesJsonArray = source["addresses"] as? [[String: Any]] {
let addresses = try transaction.importUniqueObjects(Into<Address>(), sourceArray: addressesJsonArray)
let convertToSet = Set(addresses.map { $0 })
self.phases = convertToSet
}
看起来它对我有用,但是 .= 抛出:
Binary operator '.=' cannot be applied to operands of type 'Set<AddressEntity>' and '[AddressEntity]'