我在Swift中有一个瞬态可选属性 addedImages ,作为托管对象中具有属性和访问者方法的一对多关系的一部分:
…
@NSManaged public var addedImages: NSSet?
…
@objc(addAddedImagesObject:)
@NSManaged public func addToAddedImages(_ value: MMImage)
@objc(removeAddedImagesObject:)
@NSManaged public func removeFromAddedImages(_ value: MMImage)
@objc(addAddedImages:)
@NSManaged public func addToAddedImages(_ values: NSSet)
@objc(removeAddedImages:)
@NSManaged public func removeFromAddedImages(_ values: NSSet)
…
失败的代码在串行队列中运行,并因 EXC_BAD_ACCESS 错误而崩溃。
let backgroundContext = NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.privateQueueConcurrencyType)
backgroundContext.performAndWait {
print("\(self.addedImages?.count ?? 0) added images")
self.addToAddedImages(image)
}
当我将 addedImages 定义为非瞬态时,它没有问题。 我不确定这是否是正常行为,以及我如何解决这个问题。 谢谢你的帮助。
答案 0 :(得分:0)
我假设在创建和获取期间使用nil初始化transient属性是错误的。当我尝试访问 count 时,该对象根本就不在内存中。 我必须将此添加到 awakeFromFetch 和 awakeFromInsert ,这可以。
if self.addedImages == nil {
self.addedImages = nil
}