2

Core Data を使用していますが、正しく行っているかどうか疑問に思っていました。以下の完了ハンドラーとブロックUIManagedDocumentを使用して、シングルトン オブジェクトからmy を開きます。

[[self managedDocument] openWithCompletionHandler:^(BOOL success) {
            if(success) {
                NSLog(@"DOCUMENT: Success, Opened ...");
                // TODO: Things to do when open.
                // ...
                // ...
            }
}];

私は、ドキュメントの操作を開始できることを示すUIViewControllerために監視するオブザーバーをセットアップしました。UIDocumentStateChangedNotification

- (void)awakeFromNib {
    NSLog(@"%s", __PRETTY_FUNCTION__);
    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
    [notificationCenter addObserver:self selector:@selector(documentIsReady) name:UIDocumentStateChangedNotification object:nil];
}

これは問題なく動作するように見えますが、コールバックブロックを使用していないことを認識しています。1 つの解決策は、独自の通知を作成し、それをブロックから投稿することです。基本的には同じことを行いますが、コードが読みやすくなります。どんなコメントでも大歓迎です。

4

1 に答える 1

2

ドキュメントが開かれたときにのみ、1 つのコントローラーに 1 回だけ通知する必要がある場合 (CS193P デモのように、コントローラー間で渡される単一の UIManagedDocument を使用するアプリがある場合)、完了ブロック内のコードのみを残します。

ただし、アプリがドキュメントを何度も開いたり閉じたりする予定で、複数のコントローラーがその変更を認識する必要がある場合は、通知を使用する必要があります。

于 2012-09-25T18:35:46.033 に答える