大きなXMLファイルを読み取るのにNSXMLParser
を使用しています。データ要素を取得したら、NSManagedObject
を作成し、バックグラウンドで保存します。インポートされたファイルにはn
個のインポートされたアイテムがあります。これは決して知られていません。 XMLファイルを読み込む行われ、すべての私のCore Data
のオブジェクトが保存完了したときコアデータがNSXMLParserを使用してすべてのエンティティを保存したときを知る
NSManagedObjectContext *backgroundContext = [ZSSCoreDataManager sharedService].persistentContainer.newBackgroundContext;
[backgroundContext performBlock:^{
// Create and insert new entity here
[self createAndInsertWithDictionary:object];
// Save
if ([backgroundContext hasChanges]) {
NSError *error = nil;
if (![backgroundContext save:&error]) {
NSLog(@"%@", error);
}
// Save was successful, reset to release memory
[backgroundContext reset];
}
}];
構文解析が完了することができますより速く起こる可能性があるためには、どのように私が知っていることができますか?私はparserDidEndDocument:
メソッドを知っていますが、これは私のオブジェクトのすべてがCore Data
に保存を完了したことを知るのに役立ちません。
アイデア?
私はディスパッチグループパターンをかなり使用しましたが、この状況では、 'dispatch_group_enter'が生成された後に' dispatch_group_enter'が呼び出され、別の 'dispatch_group_enter'が作成される前に非常に素早く保存されると、したがって、 'dispatch_group_notify'を呼び出すことができます。私はこれについて間違っていますか? –
ちょうどこれをテストし、すぐに 'dispatch_group_notify'を起動します。他のアイデア? –
ええ、プロセスを開始する前に "入力"を追加してください。 'parserDidEndDocument'に" leave "を追加します。パーザが終了する前にnotifyブロックを呼び出すことはできません。 –