【发布时间】:2023-01-16 10:58:11
【问题描述】:
我正在尝试使用 performBackgroundTask 在 CoreData 中保存一个实体。传递对象数组时遇到问题。下面是代码。
目标是在后台保存核心数据实体而不冻结 NStableView 或任何其他控件/
public class Transaction: NSManagedObject {
@NSManaged public var transDate: Date?
@NSManaged public var account: [Account]?
class func addTransaction(transDate : Date, transAccount : [Account]){
let appDelegate = NSApplication.shared.delegate as! AppDelegate
appDelegate.persistentContainer.performBackgroundTask({ (context) in
let entity = NSEntityDescription.entity(forEntityName: "Transaction", in: context)
let CD = Transaction(entity: entity!, insertInto: context)
CD.transDate = transDate //updated successfully
do {
let account = try context.existingObject(with: transAccount.objectID) as? Account // "This property (ObjectID) is defined on NSAtomicStoreCacheNode and may not be available in this context. Please guide what change is required in case we are passing the array of the objects
} catch {
print("something went wrong")
}
do {
try context.save()
}
catch {
print("error in saving Transaction data")
}
})
}
}
【问题讨论】:
-
只需遍历数组
transAccount并为每个对象调用 context.existingObject 并将结果添加到另一个数组,然后将其分配或附加到 Transaction.account -
@JoakimDanielson 谢谢,它有帮助!我能够前进。它回答了我的问题。我在分配给作为 NSset 的 CD.account 时遇到错误,使用 NSset(Array: person),将解决更多问题。非常感谢您的参与!
-
@JoakimDanielson 当您在 cmets 中发布答案时,即使存在答案,问题仍标记为未回答。这使得每个人都更难使用该网站。您是否会考虑更频繁地将您的答案写为答案而不是 cmets?