gpt4 book ai didi

ios - Swift CoreData : error: Serious application error. 在核心数据更改处理期间捕获到异常。

转载 作者:搜寻专家 更新时间:2023-10-31 08:20:46 26 4
gpt4 key购买 nike

我正在 iOS 上编写一个程序,我正面临这个错误:

2015-11-06 10:57:24.289 NETFNET[2503:976392] CoreData: error: Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. -[__NSCFSet addObject:]: attempt to insert nil with userInfo (null) 2015-11-06 10:57:24.293 NETFNET[2503:976392] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFSet addObject:]: attempt to insert nil'

我想,我正在尝试从主线程和后台线程同时访问数据库。我见过很多针对 Objective C 的解决方案,但没有针对 Swift 的解决方案(我不知道 Objective C...)。不幸的是,我不知道如何使用 Grand Central Dispatch,事实上,我的程序并不真的需要多个线程(我的意思是它需要它,但如果某个线程一次从一个函数丢失信息,没有什么不好的发生)。我只想在 Swift 1 或 2 上有稳定的程序,所以我将感谢任何帮助。

最佳答案

您需要创建一个具有私有(private)队列并发类型的私有(private) NSManagedObjectContext,并在后台线程上运行时使用它来访问 CoreData。

所以假设我需要在后台运行数据库操作,我可以将该工作分派(dispatch)给后台线程作为

dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0), {
//call your background operation.
})

然后在后台操作中我可以创建一个私有(private)的 NSManagedObjectContext 作为

let moc = … //Our primary context on the main queue

let privateMOC = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
privateMOC.parentContext = moc

privateMOC.performBlock {
//operations
do {
try privateMOC.save()
} catch {
fatalError("Failure to save context: \(error)")
}
}

在多线程上实现核心数据操作之前,通读 Apple 的 CoreData Concurrency Guide 以获得良好的理解。

关于ios - Swift CoreData : error: Serious application error. 在核心数据更改处理期间捕获到异常。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33562842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com