【发布时间】:2014-01-07 14:02:58
【问题描述】:
我的应用程序从第 3 方数据库(使用 AFNetworking)下载 XML 文件,然后使用 NSXMLParser 提取我需要的信息,并使用子节点“随时随地”创建记录。我正在使用 MagicalRecord 与 CoreData 进行通信。下载和解析部分工作正常,但是在我完成后,并不是所有条目都在我的表中可见,我猜刷新我的 tableView 时 MR 还没有完成。如果我离开 tableView 并返回,则会显示所有记录。
我使用dispatch_group 来确保在完成所有下载和导入任务之前不会更新 UI。使用NSLog我已经确认dispatch_group_notify块中的代码确实在所有下载和解析完成后执行。
关于如何修复代码以使所有记录立即显示在表中的任何建议?
这里有一些代码:
-(void) importRecords
{
dispatch_group_t dispatchGroup = dispatch_group_create();
for (NSString *s in self.newRecords)
{
dispatch_group_enter(dispatchGroup);
NSData *data = [self downloadDataforRecord: s]; // using AFNetworking
if (data)
[self importData: data];
dispatch_group_leave(dispatchGroup);
}
dispatch_group_notify(dispatchGroup, dispatch_get_main_queue(), ^{
// done with all the downloading and parsing
// now update the UI
self.records = [NSMutableArray arrayWithArray: [Record MR_findAllSortedBy: @"id" ascending: ascending]];
[self.tableView reloadData];
});
}
- (void) importData:(NSData *) data
{
[MagicalRecord saveWithBlock: ^(NSManagedObjectContext *localContext) {
Root *rootObject = [[Root alloc] init];
rootObject.context = localContext;
NSXMLParser *parser = [[NSXMLParser alloc] initWithData: data];
parser.delegate = rootObject;
[parser setShouldProcessNamespaces: YES];
[parser parse];
// during the parse, records and subnodes are created using:
// [Record MR_createInContext: context];
// where context is the same as in the rootObject above
}
completion: ^(BOOL success, NSError *error) {
if (error)
{
// show error alert
}
else if (success)
{
}
}];
}
【问题讨论】:
标签: ios core-data magicalrecord