2

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

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 代表什么?

4

2 回答 2

8

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

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

向左移位基本上是移位运算符后给出的任何数字的 2 次方... 1<<1 表示 2^1,1<<2 表示 2^2,等等...

8个手段UIDocumentStateEditingDisabled和12个手段的状态UIDocumentStateEditingDisabledUIDocumentStateSavingError

于 2011-11-08T08:49:16.943 回答
0

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

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

请参阅官方文档的“基于文档的应用程序编程指南”中的“示例:让用户选择版本”

于 2013-01-27T16:32:58.180 回答