При работе с Core Data, я обнаружил, что мой UIManagedDocument
объект имеет documentState
равным 5. UIDocument
documentation только определяет эти константы:UIManagedDocument documentState == 5, неопределенное состояние постоянной
enum { UIDocumentStateNormal = 0,
UIDocumentStateClosed = 1 << 0,
UIDocumentStateInConflict = 1 << 1,
UIDocumentStateSavingError = 1 << 2,
UIDocumentStateEditingDisabled = 1 << 3 }; typedef NSInteger UIDocumentState;
который был бы 0 , 1, 2, 4 и 8. 5 может быть специальным состоянием, которое использует UIManagedDocument
, но я не могу найти его документально зарегистрированным. Как представляется, состояние возникает при изменении схемы основных данных. Я не знаю, что означает государство. Обычно я получаю сообщение об ошибке: Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation.'
, что имеет смысл, потому что документ нужно открыть в нормальном состоянии, чтобы использоваться как постоянное хранилище.
Сейчас я просто проверяю, что состояние равно 5 и удаляет постоянное хранилище и воссоздает его, когда это происходит. Но как только мое приложение будет жить и хранит пользовательские данные, я не хочу этого делать. Я не изучал лучшие практики переноса схем Core Data, но, похоже, это тоже беспорядочно, чтобы проверить код managedDocument.documentState == 5
в моем коде. Нет ли какой-либо документации по этому документу в любом месте?
Обновление: Теперь, когда я смотрю на это, было бы разумно, что причина, по которой эти константы определены так, как они есть, заключается в том, что они могут быть побитовыми вместе как маски. Таким образом, documentState
, равный 5, будет означать, что он равен UIDocumentStateClosed
, а также UIDocumentStateSavingError
. Однако эти ошибки довольно общие. Как я могу сузить основную причину?
Кроме того, весь пример код я видел для проверки этих состояний документов показывают проверки равенства, то есть if (managedDocument.documentState == UIDocumentStateClosed)
, но это будет означать, что это не правильно, и скорее следует проверить с помощью побитового и, т.е. if (managedDocument.documentState & UIDocumentStateClosed)
.
Я пришел к такому выводу, как вы отвечали. Есть ли у вас какая-либо помощь относительно того, как найти источник состояния ошибки сбережения? Как я уже сказал, я предполагаю, что это связано с изменением схемы, но как бы я это убедился? –
@JeffLockhart: Я только пытался ответить на первую версию вашего вопроса. К сожалению, я не могу помочь вам со второй версией. –