#iphone #objective-c #ios5 #icloud #uidocument
#iPhone #objective-c #ios5 #icloud #uidocument
Вопрос:
Всякий раз, когда я загружаю UIDocument из iCloud, я проверяю его состояние следующим образом:
NSLog(@"Library loadFromContents: state = %d", self.documentState);
В некоторых случаях я получал documentState 8 или 12, которые вызывали сбои. Теперь мне интересно, что именно обозначают 8 и 12. Насколько мне известно, documentState — это битовое поле, поэтому у него много разных флагов. Документы показывают, что:
enum {
UIDocumentStateNormal = 0,
UIDocumentStateClosed = 1 << 0,
UIDocumentStateInConflict = 1 << 1,
UIDocumentStateSavingError = 1 << 2,
UIDocumentStateEditingDisabled = 1 << 3 };
typedef NSInteger UIDocumentState;
Однако я понятия не имею, как интерпретировать это в моей ситуации. Как мне узнать, что означают 8 и 12?
Ответ №1:
Внутри перечисления они выполняют некоторый сдвиг битов. Они могли бы также написать это так:
enum {
UIDocumentStateNormal = 0,
UIDocumentStateClosed = 1,
UIDocumentStateInConflict = 2,
UIDocumentStateSavingError = 4,
UIDocumentStateEditingDisabled = 8 };
typedef NSInteger UIDocumentState;
Небольшой сдвиг влево в основном равен 2 в степени любого числа, заданного после оператора shift … 1<<1 означает 2 ^ 1, 1<<2 означает 2 ^ 2 и т.д…
Состояние 8 означает UIDocumentStateEditingDisabled
, а 12 означает UIDocumentStateEditingDisabled
и UIDocumentStateSavingError
Комментарии:
1. Большое спасибо за это очень ясное объяснение!
Ответ №2:
Предлагаемый способ справиться с этими уведомлениями — не проверять наличие if(state == UIDocumentStateInConflict)
, а логически И примерно так:
if (state amp; UIDocumentStateInConflict) {
// do something...
}
смотрите «Пример: разрешение пользователю выбирать версию» в «Руководстве по программированию приложений на основе документов» из официальных документов