gpt4 book ai didi

ios - 导入唯一对象时 CoreStore 映射关系

转载 作者:行者123 更新时间:2023-11-28 13:42:34 24 4
gpt4 key购买 nike

我找到了我认为不错的图书馆 CoreStore正如我们所见,它们提供了导入和唯一导入以及可导入协议(protocol)背后的映射功能,我们需要在 NSManagedObject 对象子类中实现这些功能才能设置属性。

我的问题是有关于如何正确映射关系的文档吗?例如,如果我有一个 Person 和许多 Addresses,我是否需要使用 Person NSManagedObject 的相同 didInsert func 并像这样执行异步事务:

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 自动执行,或者我走错了路,还有其他一些漂亮的解决方案。

谢谢

正如 Martin 建议的那样,我添加了类似的内容:

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
}

看起来它对我有用,但是 .= throws:

Binary operator '.=' cannot be applied to operands of type 'Set<AddressEntity>' and '[AddressEntity]'

最佳答案

因为您已经在执行异步 block 中运行了 importUniqueObjects(希望如此),所以您不必担心创建另一个异步事务来导入和添加关系。只需使用参数中的交易即可。

与在 didInsert 中相比,您宁愿在更新中(来自源:ImportSource,在事务中:BaseDataTransaction)执行此操作,否则一旦您更改对象上的某些内容,您的关系可能会中断。

你甚至不必循环,就那样使用它,假设“地址”是你的关系容器:

func update(from source: ImportSource, in transaction: BaseDataTransaction) throws {
if let addressesJsonArray = source["addresses"] as? [[String: Any]] { // array of dict.
addresses .= try transaction.importUniqueObjects(Into<AddressEntity>(), sourceArray: addressesJsonArray)
}
}

关于ios - 导入唯一对象时 CoreStore 映射关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55846258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com