我正在使用NSXMLParser
来读取大型XML文件。获得我想要的数据元素后,我创建一个NSManagedObject
并将其保存在后台上下文中。导入的文件将包含n
个导入的项目,但从未知道。
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];
}
}];
因为解析发生的速度可能比save:
完成的速度快,所以如何知道XML文件何时完成读取并且所有Core Data
个对象都已完成保存?我知道parserDidEndDocument:
方法,但这无助于知道我的所有对象何时完成保存到Core Data
。
想法?
答案 0 :(得分:1)
一种显而易见的方法是将performBlock
替换为performBlockAndWait
,以便在块完成后知道保存也已完成。
如果您不想等待,这听起来像是派遣小组的工作。这样就可以在一堆异步代码完成后调度函数。
dispatch_group_create
dispatch_group_enter
。dispatch_group_leave
dispatch_group_notify
来安排只有在每次“输入”与“请假”匹配时才会执行的块。将代码放入每次保存完成后应运行的“notify”块中。