【发布时间】:2018-10-05 21:00:44
【问题描述】:
我收到NotificationCenter.default 的通知,该通知触发了一个 prune 方法,该方法在尝试从我的商店取货时崩溃。方法是这样的:
@objc fileprivate func pruneBooks() {
DispatchQueue.global(qos: .background).async {
let context = cdStack.getManagedObjectContext()
context.perform {
do{
let request = NSFetchRequest<Book>(entityName: "Book")
let result = try context.fetch(request)\\ <----- CRASHES HERE
//DO STUFF
}catch{
// Handle Error
}
}
}
}
这就是我的getManagedObjectContext 方法的样子:
func getManagedObjectContext() -> NSManagedObjectContext {
let thread = Thread.current
if thread.isMainThread {
return mainMOC
}
let childContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
childContext.parent = mainMOC
NotificationCenter.default.addObserver(self,
selector: #selector(didReceiveChildContextDidSave(notification:)),
name: .NSManagedObjectContextDidSave,
object: childContext)
return childContext
}
我还没有找到一种方法来复制这个崩溃我只是在苹果崩溃报告中得到它。这是回溯:
Book 是挑衅和实体,并被命名为 Book,所以我知道这不是问题所在。另外,我很困惑为什么它没有赶上而不是崩溃。
注意:该应用适用于 iOS 9 及更高版本,这就是我不使用 NSPersistentContainer 的原因。
【问题讨论】:
标签: swift core-data grand-central-dispatch nsnotificationcenter nsfetchrequest