【发布时间】:2017-07-22 09:36:24
【问题描述】:
required public init?(map: Map) {
let context = (UIApplication.shared.delegate as! AppDelegate).privateContext
let entity = NSEntityDescription.entity(forEntityName: "Shop", in: context)
super.init(entity: entity!, insertInto: context)
self.mapping(map: map)
}
所以基本上它在第三行抛出异常
super.init(entity: entity!, insertInto: context)
CoreData`+[NSManagedObjectContext __Multithreading_Violation_AllThatIsLeftToUsIsHonor__]:
0x1028df220 <+0>: pushq %rbp
0x1028df221 <+1>: movq %rsp, %rbp
-> 0x1028df224 <+4>: ud2
0x1028df226 <+6>: nopw %cs:(%rax,%rax)
我认为如果我使用 privateContext 可能会解决问题,但事实并非如此。
lazy var privateContext: NSManagedObjectContext = {
let privateMOC = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
privateMOC.parent = self.managedObjectContext
return privateMOC
}()
我不能在 initMethod 中执行 context.performBlock 之类的操作
顺便说一下,我使用的是 tristanhimmelman/AlamofireObjectMapper,这是 Shop 类 managedobject。它符合可映射协议。
public class Shop: NSManagedObject, Mappable
我认为一切正常,因为我可以在 SQLiteViewer 中看到对象,但随机崩溃开始发生,所以我添加了这个 -com.apple.CoreData.ConcurrencyDebug 1,很惊讶它这么早就抛出了异常。
【问题讨论】:
标签: ios core-data objectmapper