Авария на 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.
Есть ли у кого-то такой же крах?
Ответы
Ответ 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