• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 由于 NSManagedObjectContextObjectsDidChangeNotification 导致的运行时错误

[复制链接]
菜鸟教程小白 发表于 2022-12-11 18:24:26 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我遇到了这个运行时错误,它在刷新数据或启动时(从服务获取并保存在 coreData)中发生 50% 的时间。我已经浏览了几乎所有关于这个问题的解决方案,但其中大多数都在 Obj-C 中,但我是 iOS 新手并且使用 swift。我有大约 20 个表,并且都使用相同的上下文。

下面是我的代码:

public class ServiceCalls : NSManagedObject {
  /*
             class func getContext () -> NSManagedObjectContext {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate

        let moc = NSManagedObjectContext(concurrencyType:.mainQueueConcurrencyType)
        let privateMOC = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
        privateMOC.parent = moc

        privateMOC.perform({
            do {
                try privateMOC.save()
            } catch {
                fatalError("Failure to save context: \(error)")
            }
        })
        return appDelegate.persistentContainer.viewContext
    }
             */ // tried this but didn't work

     class func getContext () -> NSManagedObjectContext {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        return appDelegate.persistentContainer.viewContext
    }

这就是我的使用方式,下面只是将数据保存在数据库中的一个示例。

class func SaveCustomerContacts(name : String,id : String){

let context = getContext()
let entity =  NSEntityDescription.entity(forEntityName: "AllCustomerContacts_Tbl", in: context)
let newDoc = NSManagedObject(entity: entity!, insertInto: context)

newDoc.setValue(name, forKey: "contactName")
newDoc.setValue(id, forKey: "id") 



    //save the object
do {
    try context.save()
    print("saved Customer contacts in Database yayy!")

} catch let error as NSError  {
    print("Could not save \(error), \(error.userInfo)")
} catch {
    let nserror = error as NSError
    fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}

这是抛出的完整异常:

    [error] 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)
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)
2017-07-31 16:09:20.908 Sales CRM[5846:202190] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFSet addObject:]: attempt to insert nil'
*** First throw call stack:



Best Answer-推荐答案


错误表明正在插入一些 nil 值。

[error] 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)
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)
2017-07-31 16:09:20.908 Sales CRM[5846:202190] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFSet addObject:]: attempt to insert nil'
*** First throw call stack:

这个问题可能有多种原因:

  1. 您正在使用多个上下文并且没有正确处理它们。
  2. 您正尝试在后台保存并发类型为 MainQueueConcurrencyType 的上下文。请改用 PrivateQueueConcurrencyType
  3. 保存的值是 nil 或某种错误数据(在关系中)。

关于ios - 由于 NSManagedObjectContextObjectsDidChangeNotification 导致的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45414169/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap