多数の管理対象オブジェクトを作成して、バックグラウンドキューからCoreDataに追加しています。私の理解では、バックグラウンドスレッドからコンテキストにアクセスできなかったため、performBlockを使用して、コンテキストが作成されたのと同じキューにコアデータを追加するようにスケジュールしていました。これは問題なく動作します...
私の質問は、テスト中に[moc performBlock:^{ ... }];
、アプリケーションを削除しても期待どおりに機能することに気づきました(おそらく数分の1秒速くなります)performBlock
?私はそうしていると思いますが、(今のところ:)スレッドセーフではない方法で機能しているので、理解に欠陥がないことを確認したかっただけです。
dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(backgroundQueue, ^{
// GET DATA
// PROCESS DATA
NSManagedObjectContext *context = [[self managedDocument] managedObjectContext];
[moc performBlock:^{
// ADD TO CORE DATA
[Core createRodInContext:context withDictionary:fuelRodDictionary];
}];
});
編集: createRodInContextの実装を追加しました...
+ (Rod *)createRodInContext:(NSManagedObjectContext *)context withDictionary:(NSDictionary *)dictionary {
// CREATE
Rod *rod = [NSEntityDescription insertNewObjectForEntityForName:@"Rod" inManagedObjectContext:context];
// POPULATE
[neo setDataCode:[dictionary objectForKey:@"dataCode"]];
[neo setDataName:[dictionary objectForKey:@"dataName"]];
[neo setDataReference:[dictionary objectForKey:@"dataReference"]];
...
return rod;
}