如何解读document.state == 12(iCloud)

时间:2011-11-08 08:45:48

标签: iphone objective-c ios5 icloud uidocument

每当我从iCloud加载UIDocument时,我都会检查它的状态:

NSLog(@"Library loadFromContents: state = %d", self.documentState);

在某些情况下,我收到了导致崩溃的documentState 8或12。我现在想知道8和12究竟是什么代表什么。据我所知,documentState是一个位字段,因此它有许多不同的标志。 docs显示:

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

但是,我不知道如何在我的情况下解释这一点。我如何找出8和12代表什么?

2 个答案:

答案 0 :(得分:8)

在枚举中,他们做了一些小位移。他们也可以这样写:

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

向左移位基本上是移位运算符后给出的任何数的幂的幂... 1&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; 2&gt;

状态8表示UIDocumentStateEditingDisabled,12表示UIDocumentStateEditingDisabledUIDocumentStateSavingError

答案 1 :(得分:0)

建议的处理这些通知的方法是检查if(state == UIDocumentStateInConflict)但是使用逻辑AND这样:

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

请参阅官方文档中的"An Example: Letting the User Pick the Version" in "Document-based app programming guide"