Поиск и устранение неисправностей
При наличии затруднений, заставляя приложение работать правильно попробуйте решающие проблему подходы, описанные в этой главе.
Диагностирование проблем идентификатора объекта
Если Вы регистрируете управляемый объект ID или идентификатор объекта URIRepresentation
возразите и Вы получаете нераспознанное селекторное исключение, или оно распечатывает <(null)>
, проверьте, что Ваш ссылочный объект имеет тип NSString
или NSNumber
. Все другие типы не поддерживаются.
Диагностирование дающих сбой проблем
Если NSObjectInaccessibleException
исключение повышено при доступе к свойствам на управляемом объекте, которым это могло быть по одной из следующих причин:
Управляемый объект, на который Вы содержите ссылку, был удален из хранилища и больше не действителен.
Эта проблема наиболее вероятна не в Вашем инкрементном хранилище. Удостоверьтесь, что Ваш Базовый Стек данных устанавливается должным образом и что Вы не содержите ссылки на управляемые объекты после того, как они были удалены (особенно при работе с многократными контекстами).
newValuesForObjectWithID:withContext:error
илиnewValueForRelationship:forObjectWithID:withContext:error
возвращаютсяnil
.Поместите точку останова в возврате метода
nil
. Обязательно установитеerror
параметр кNSError
объект с полезной информацией для будущей отладки. Если доступность Вашего хранилища данных поддержки энергозависима (например, взаимодействуя с веб-сервисом), передайте эти изменения доступности в своем пользователе и обеспечьте механизм нейтрализации, такой как кэш.
Если пустое к - одно отношение не может быть дано сбой в, возвратиться [NSNull null]
вместо nil
от newValuesForObjectWithID:withContext:error:
или newValueForRelationship:forObjectWithID:withContext:error:
сообщать персистентному координатору хранилища, что отношение пусто. Иначе, персистентный координатор хранилища предполагает, что произошла внутренняя ошибка.
Если пустое к - многие, в которых не может быть дано сбой отношение, Вы возвращаетесь nil
в одном из двух методов выполнения отношения. Реализация к - много отношений может быть задержана до newValueForRelationship:forObjectWithID:withContext:error:
. Однако, когда этот метод вызывают, отношение должно быть выполнено. Если отношение не содержит объектов, возвратите пустой массив, а не nil
. Иначе, персистентный координатор хранилища предполагает, что произошла внутренняя ошибка.
Диагностирование оптимистических проблем блокировки
Если конфликты слияния не разрешаются, или политика слияния перестала работать, проверьте, что следующие части Вашей реализации корректны:
NSError
объект должным образом создается.NSMergeConflict
объекты должным образом создаются.Номера версий, которые Вы обеспечиваете, указывают, что произошел оптимистический отказ блокировки.
Если конфликты слияния ошибочно обнаруживаются, гарантируют постепенное увеличение номеров версий каждый раз, когда записи сохраняются.