每当我从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代表什么?
答案 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表示UIDocumentStateEditingDisabled
和UIDocumentStateSavingError
答案 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"