0

Standford CS193P 経由で iOS を学習していますが、コア データ部分で問題が発生しました。

私はコアデータを使用してアプリを構築しようとしています.AppDelegateのカテゴリを作成します(didFinishLaunchingWithOptionsでUIManagedDocumentを作成します). .managedDocument = [self createUIManagedDocument] 取得するには:

- (UIManagedDocument *)createUIManagedDocument
{

    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSURL *documentsDirectory = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];
    NSURL *url = [documentsDirectory URLByAppendingPathComponent:APP_NAME];
    UIManagedDocument *managedDocument = [[UIManagedDocument alloc] initWithFileURL:url];

    if ([[NSFileManager defaultManager] fileExistsAtPath:[url path]]) {
        // If the file exists, open it
        NSLog(@"File exists, not opening...");
        [managedDocument openWithCompletionHandler:^(BOOL success) {
            NSLog(@"File opened.");
        }];
    } else {
        // If the file not exists, create it
        NSLog(@"File not exists, now creating...");
        [managedDocument saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
            // If the file create succesfully, open it
            [managedDocument openWithCompletionHandler:^(BOOL success) {
                NSLog(@"File opened.");
            }];
        }];
    }
    return managedDocument;
}

UIManagedDocument の作成後、次を使用してこの UIManagedDocument をビュー コントローラーに渡そうとしています。

RootViewController *rootViewController = (RootViewController *)self.window.rootViewController;
rootViewController.managedDocument = self.managedDocument;

そして問題が発生し、View Controller で UIManagedDocument を開くことができません。丸一日検索したところ、答えが得られました。非同期で同時に2回開こうとしたため、IOリクエストの処理に時間がかかりました。いくつかのアプローチがあり、そのほとんどは Singleton を使用しています。

これが私の質問です:

  1. 上記のアプローチを使用してこれを行うことはできますか?
  2. いいえの場合、この UIManagedDocument を作成してアプリに渡す標準的な (または正しい) 方法は何ですか?
  3. UIManagedDocument を渡す代わりに、この UIManagedDocument の NSManagedObjectContext をビュー コントローラーに渡す必要がありますか?

私の質問を見直してくれてありがとう。

4

1 に答える 1

1

コースでは、通知を使用してこれを行うように指示されています。彼はこれについて、講義 13 の 51:20 のデモで説明しています。

于 2014-05-07T15:36:14.087 に答える