0

セルをプッシュすると、プロンプト付きの AlertView がポップアップします。私の問題:入力したテキストをプロンプトから選択したセルに表示したい。(その間、テキストを Core Data に保存します)。誰でも私を正しい方向に押すことができますか?

4

1 に答える 1

0

アラートの表示と同時に保存する場合は、バックグラウンドスレッドで保存する必要があります。

最も簡単なアプローチは、ネストされたコンテキストを使用し、メインコンテキストから保存することです。

管理対象オブジェクトコンテキストを作成する場合は常に、alloc/initの部分を...に置き換えます。

NSManagedObjectContext *parentMoc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
parentMoc.persistentStoreCoordinator = persistentStoreCoordinator;
self.managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
self.managedObjectContext.parentContext = parenetMoc;

これで、以前使用していたのと同じMOCができましたが、メインキューMOCであり、親コンテキストがバックグラウンドキューで実行されています。

ただし、両方のコンテキストを保存するには、メソッドを使用する必要があります。親での2回目の保存はバックグラウンドスレッドで行われるため、待つ必要はありません。

- (void)saveData {
    NSError *error = nil;
    NSManagedObjectContext *moc = self.managedObjectContext;
    if ([moc save:&error]) {
        moc = moc.parentContext;
        [moc performBlock:^{
            NSError *error = nil;
            if (![moc save:&error]) {
                // Handle the actual save error
            }
        }];
    } else {
        // Handle the error of saving up into the parent context...
    }
}

これで、[managedObjectContext save:&error]を直接呼び出す代わりに、saveDataのメッセージに置き換えると、メソッドはほぼすぐに返され、実際の保存はバックグラウンドスレッドで行われます。

アプリ内の他のコード(保存呼び出しを除く)を変更する必要はありません。

あなたの場合、アラートをスローする直前にsaveを呼び出すと、アラートが表示されている間に保存が行われます。

于 2012-08-06T22:02:00.003 に答える