2014-09-16 3 views
21

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

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.

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

+0

Ошибка кажется довольно явной. Вы пытались найти строку своей ошибки? Если да, не могли бы вы показать код? – Larme

+0

Здесь строка: if (! [Self.managedObjectContext save: & error]) { NSLog (@ "Неразрешенная ошибка в сохранении контекста!% @,% @ ", error, [error userInfo]); return NO; } – Antoine

+0

Трассировка стека предполагает, что она имеет какое-то отношение к отношениям на объекты, которые вы сохраняете. Что не так, не совсем ясно, но я 'd внимательно изучите, какие объекты изменились и каковы их отношения. –

ответ

-3

некоторого NSString присоединять нулевую стоимость

+0

Спасибо вам за ваш ответ. Но все атрибуты строки типа являются необязательными в моей модели. И он хорошо работает с теми же данными на ios7 – Antoine

1

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

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

8

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

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

Спасибо! Между этим ответом и http://stackoverflow.com/questions/7385439/exception-thrown-in-nsorderedset-generated-accessors я смог решить проблему, которая заняла у меня день! Спасибо!!! – Adrian

+0

Спасибо! Я потратил несколько дней на это, наконец, избавился от этого исключения благодаря вашему (и @Fabio Ritrivato) решению – marius

1

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

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

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

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

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

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

Смежные вопросы