Я нашел хорошую библиотеку CoreStore , так как мы видим, что они обеспечивают импорт и уникальный импорт с возможностью отображения за импортируемыми протоколами, которые нам нужно реализовать в NSManagedObject
объектном подклассе, чтобы иметь возможность устанавливать свойства.
У меня вопрос, есть ли документация, как правильно отобразить отношения?Например, если у меня есть один Person
и много адресов, нужно ли мне использовать одну и ту же функцию didInsert Person NSManagedObject и выполнять асинхронную транзакцию следующим образом:
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
}
Похоже, у меня это работает, но. = throws:
Binary operator '.=' cannot be applied to operands of type 'Set<AddressEntity>' and '[AddressEntity]'