知道Core Data何时使用NSXMLParser

时间:2017-10-30 20:55:38

标签: ios objective-c core-data nsxmlparser

我正在使用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

想法?

1 个答案:

答案 0 :(得分:1)

一种显而易见的方法是将performBlock替换为performBlockAndWait,以便在块完成后知道保存也已完成。

如果您不想等待,这听起来像是派遣小组的工作。这样就可以在一堆异步代码完成后调度函数。

  • 使用dispatch_group_create
  • 创建一个调度组
  • 每次启动其中一个块时,请在执行任何其他操作之前调用dispatch_group_enter
  • 每次保存完成后,请致电dispatch_group_leave
  • 使用dispatch_group_notify来安排只有在每次“输入”与“请假”匹配时才会执行的块。

将代码放入每次保存完成后应运行的“notify”块中。