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