2

iCloudからUIDocumentをロードするときはいつでも、次のようにその状態をチェックします。

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

場合によっては、クラッシュの原因となったdocumentState8または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)、次のような論理積を使用することです。

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

公式ドキュメントの「ドキュメントベースのアプリプログラミングガイド」の「例:ユーザーにバージョンを選択させる」を参照してください。

于 2013-01-27T16:32:58.180 に答える