Временный необязательный сбой NSSet с ошибкой EXC_BAD_ACCESS

У меня есть временный необязательный атрибут addedImages в Swift как часть отношения «один ко многим» внутри управляемого объекта с атрибутом и методами доступа:

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

Это работает без проблем, когда я определяю добавленные изображения как непереходные. Я не уверен, что это нормальное поведение, и как я могу это исправить. Спасибо за помощь.


person rschoene27    schedule 27.10.2017    source источник
comment
Является ли self управляемым объектом в другом контексте?   -  person Willeke    schedule 28.10.2017
comment
Нет, он создан в том же частном контексте.   -  person rschoene27    schedule 28.10.2017


Ответы (1)


Мое предположение, что переходный атрибут будет инициализирован nil во время создания и выборки, было неверным. Когда я попытался получить доступ к count, объекта просто не было в памяти. Мне пришлось добавить это в awakeFromFetch и awakeFromInsert, и это работает.

if self.addedImages == nil {
  self.addedImages = nil
}
person rschoene27    schedule 27.10.2017