Сбой основных данных — указание NSManagedObjectContextObjectsDidChangeNotification: попытка вставить ноль с помощью userInfo

#ios #swift #core-data

#iOS #swift #основные данные

Вопрос:

Когда я пытаюсь вставить ряд данных с помощью CoreData, он случайным образом выходит из строя с этим сообщением об ошибке:

 2019-04-03 17:24:31.217510 0530 YOUR APP[8862:401750] [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)
2019-04-03 17:24:31.223609 0530 YOUR APP[8862:401750] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFSet addObject:]: attempt to insert nil'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000107c371bb __exceptionPreprocess   331
    1   libobjc.A.dylib                     0x00000001071dd735 objc_exception_throw   48
    2   CoreFoundation                      0x0000000107c37015  [NSException raise:format:]   197
    3   CoreFoundation                      0x0000000107c128da -[__NSCFSet addObject:]   202
    4   CoreData                            0x00000001068cbb2b -[NSManagedObjectContext(_NSInternalChangeProcessing) _processPendingUpdates:]   379
    5   CoreData                            0x00000001068c632b -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:]   1163
    6   CoreData                            0x000000010689ee8a _performRunLoopAction   394
    7   CoreFoundation                      0x0000000107b9bc27 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__   23
    8   CoreFoundation                      0x0000000107b960be __CFRunLoopDoObservers   430
    9   CoreFoundation                      0x0000000107b96751 __CFRunLoopRun   1537
    10  CoreFoundation                      0x0000000107b95e11 CFRunLoopRunSpecific   625
    11  GraphicsServices                    0x000000011160a1dd GSEventRunModal   62
    12  UIKitCore                           0x000000010c90a81d UIApplicationMain   140
    13  YOUR APP                            0x0000000104e23031 main   225
    14  libdyld.dylib                       0x000000010b419575 start   1
    15  ???                                 0x0000000000000001 0x0   1
)
libc  abi.dylib: terminating with uncaught exception of type NSException
  

Я не могу выяснить причину сбоя, но этот сбой происходит в 1/3 раза, когда вставка / извлечение происходит в core data.

Пожалуйста, найдите код ниже

 public func insertUser(userList: [user], completion : (Bool) -> ()){
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context = appDelegate.persistentContainer.viewContext

        do {
            let userEntity = NSEntityDescription.entity(forEntityName: "User_Table", in: context)

            for user in userList {
                let userBrandName = NSManagedObject(entity: userEntity!, insertInto: context)

                userBrandName.setValue(id, forKey: "Identity")
                userBrandName.setValue(name, forKey: "Name")
.....
                userBrandName.setValue(discount, forKey: "Discount")

                try context.save()
            } 
            completion(true)

        } catch {
            completion(false)
        }

    }
  

Я не могу найти проблему / причину, стоящую за этим. Я новичок в Swift и Core Data

Комментарии:

1. Почему бы не сохранять в конце цикла for, а не каждый раз?

2. Вы должны поместить try context.save() после завершения цикла

3. @Larme Я тоже пробовал это, но все еще получаю ту же ошибку / сбой

4. @PrashantTukadiya это был мой первоначальный код, который все еще разбился.. Затем я попробовал это

5. У вас есть наблюдатель для этого уведомления? «Обычно это ошибка в наблюдателе NSManagedObjectContextObjectsDidChangeNotification».