暂时性可选 NSSet 崩溃并出现EXC_BAD_ACCESS错误



我在 Swift 中添加了一个暂时的可选属性 Images,作为托管对象中与属性和访问器方法的一对多关系的一部分:

…
@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)
}

当我宁愿将添加的图像定义为非瞬态时,它可以毫无问题地工作。我不确定这是否是正常行为,以及如何解决此问题。谢谢你的帮助。

我假设在创建和获取期间将使用 nil 初始化瞬态属性是错误的。当我尝试访问计数时,该对象根本不在内存中。我不得不将其添加到 awakeFromFetchawakeFromInsert,这有效。

if self.addedImages == nil {
  self.addedImages = nil
}

最新更新