Подтвердить что ты не робот

Авария на coredata ios8

У меня есть сбой при работе с CoreData при сохранении:

2014-09-16 09:51:58.273 My_app[2678:105246] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString appendString:]: nil argument'
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001087413f5 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x00000001083dabb7 objc_exception_throw + 45
    2   CoreFoundation                      0x000000010874132d +[NSException raise:format:] + 205
    3   CoreFoundation                      0x000000010871274f mutateError + 159
    4   CoreData                            0x000000010672ae56 -[_NSSQLGenerator prepareMasterReorderStatementPart2ForRelationship:] + 118
    5   CoreData                            0x0000000106792fd8 -[NSSQLAdapter newCorrelationMasterReorderStatementPart2ForRelationship:] + 72
    6   CoreData                            0x00000001067a9751 -[NSSQLiteConnection writeCorrelationMasterReordersFromTracker:] + 817
    7   CoreData                            0x00000001067aa061 -[NSSQLiteConnection writeCorrelationChangesFromTracker:] + 65
    8   CoreData                            0x000000010679c617 -[NSSQLCore writeChanges] + 1351
    9   CoreData                            0x00000001066dfadf -[NSSQLCore saveChanges:] + 479
    10  CoreData                            0x00000001066b0ee4 -[NSSQLCore executeRequest:withContext:error:] + 484
    11  CoreData                            0x00000001067868f2 __65-[NSPersistentStoreCoordinator executeRequest:withContext:error:]_block_invoke + 4354
    12  CoreData                            0x000000010678e7ee gutsOfBlockToNSPersistentStoreCoordinatorPerform + 190
    13  libdispatch.dylib                   0x00000001091e27f4 _dispatch_client_callout + 8
    14  libdispatch.dylib                   0x00000001091c9848 _dispatch_barrier_sync_f_invoke + 365
    15  CoreData                            0x00000001067813d5 _perform + 197
    16  CoreData                            0x00000001066b0ac8 -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 504
    17  CoreData                            0x00000001066d9d2d -[NSManagedObjectContext save:] + 1213

Тот же код работает в ios7.

Есть ли у кого-то такой же крах?

4b9b3361

Ответ 1

Чтобы обобщить комментарии, которые помогли мне решить эту проблему:

  • Это, по-видимому, ошибка в основных данных, связанных с Согласованные отношения "многие-ко-многим"
  • Если вам нужно сохранить упорядоченный вариант, похоже, это обходное решение: сделайте связь упорядоченной в обоих направлениях (спасибо @Fabio Ritrovato).

Ответ 2

Я также вижу эту точную ошибку на симуляторе iOS 8 и не могу понять, что я делаю неправильно. Я смог обойти проблему, используя @try/@catch, но я бы лучше понял, где конфликт, или если я что-то делаю неправильно.

@Ryan - у вас есть проблема/ссылка на яблоко, которую вы можете разместить здесь? Как насчет примера проекта?

Ответ 3

Я увидел ту же проблему и попытался применить обходное решение, упомянутое @knl. Однако, похоже, что упорядочение отношений в обоих направлениях имеет серьезный побочный эффект.

Я заметил, что если бы я скорректировал порядок отношений в одном объекте, это испортит порядок отношений в других объектах одного и того же объекта.

Скажем, у нас есть две компании - компания и сотрудник. "Компания" имеет отношение "служащие" к "Сотруднику", которое является упорядоченным отношением "многие" . С другой стороны, "Сотрудник" имеет обратную связь с "Компанией", называемой "компаниями", которая также является упорядоченной для многих отношений. (Первоначально Employee.companies было просто отношением "многие" , но позже я изменил его на упорядоченное отношение "многие" как обходное решение.)

Теперь, предполагая, что есть два объекта Company, A и B, я обнаружил, что если я изменю порядок объектов в A.employees, будет также затронут порядок объектов в B.employees. Я должен упомянуть, что A.employees был скорректирован в частном дочернем контексте и когда дочерний контекст был сохранен, и, таким образом, изменения были перенесены обратно в родительский контекст, тогда был изменен B.employees.

Я добавил несколько журналов, и кажется, что изменения были внесены только в A.employees, но это вызвало глобальный цепной эффект. Основные данные интегрировали каждый объект (X) в A.employees и удалили все объекты Компании в X.companies, а затем добавили их обратно в произвольном порядке, что вызвало проблему, о которой я говорю.

Я не знаю, является ли это ошибкой в ​​основных данных или спроектированном поведении. Если это ошибка, то, вероятно, мне нужно сообщить об этом Apple, но если это спроектированное поведение, что еще одно обходное решение?

Ответ 4

some nsstring добавляет значение nil