Как интерпретировать document.state == 12 (iCloud) - PullRequest
2 голосов
/ 08 ноября 2011

Каждый раз, когда я загружаю UID-документ из 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?

Ответы [ 2 ]

8 голосов
/ 08 ноября 2011

Внутри перечисления они немного сдвигают биты.Они могли бы также написать это так:

enum {
UIDocumentStateNormal          = 0,
UIDocumentStateClosed          = 1,
UIDocumentStateInConflict      = 2,
UIDocumentStateSavingError     = 4,
UIDocumentStateEditingDisabled = 8   }; 
typedef NSInteger UIDocumentState;

Сдвиг влево в основном равен 2 степени, равной числу, указанному после оператора сдвига ... 1 << 1 означает 2 ^ 1, 1 << 2 означает 2 ^ 2 и т. Д ... </p>

Состояние 8 означает UIDocumentStateEditingDisabled, а 12 означает UIDocumentStateEditingDisabled и UIDocumentStateSavingError

0 голосов
/ 27 января 2013

Предлагаемый способ работы с этими уведомлениями состоит в том, чтобы не проверять if(state == UIDocumentStateInConflict), а с логическим И следующим образом:

if (state & UIDocumentStateInConflict) {
    // do something...
}

см. «Пример: предоставление пользователю возможности выбрать версию» в «Руководстве по программированию приложений на основе документов» из официальных документов

...