我正在使用 MagicalRecord,在我的一个视图控制器中,数据源是由来自数据库的数据提供的。由于进料过程包括多个步骤,我尝试使用 GCD 来加快整个过程。一般过程看起来是这样的。
获取 globalSummary 中的访问属性后要做的工作。问题是应用程序在 dispatch_group_wait 处挂起。我尝试在步骤中添加工作,并且它在开始时可以工作,但是随着我添加更多工作,如果我逐步完成代码,它会起作用,但如果我让它运行则不起作用。
这种方法有问题还是在某种程度上与 MagicalRecord 有冲突?
- (NSArray *)dataSource
{
if (_dataSource == nil) {
_dataSource = [NSMutableArray array];
NSManagedObjectContext *privateContext = [NSManagedObjectContext contextWithStoreCoordinator:[NSPersistentStoreCoordinator defaultStoreCoordinator]];
GlobalSummary *globalSummary = [GlobalSummary insertInManagedObjectContext:privateContext]; // holds a bunch of fetched properties
dispatch_queue_t queue = dispatch_queue_create("de.berndrabe.dataSource", DISPATCH_QUEUE_CONCURRENT);
dispatch_group_t outerGroup = dispatch_group_create();
__block SectionInfo *siPilotAircraft = nil;
if ([PilotAircraft countOfEntities]) {
dispatch_group_async(outerGroup, queue, ^{
NSArray *frPilotAircraft = [PilotAircraft findAll];
// do some processing an set SectionInfo variable
});
}
__block SectionInfo *siMedicals = nil;
if ([PilotMedical countOfEntities]) {
dispatch_group_async(outerGroup, queue, ^{
NSArray *frPilotMedical = [PilotMedical findAll];
});
}
// more working packets following the same patter
dispatch_group_wait(outerGroup, DISPATCH_TIME_FOREVER);
if (siPilotAircraft.countOfRows) {
[_dataSource addObject:siPilotAircraft];
}
if (siMedicals.countOfRows) {
[_dataSource addObject:siMedicals];
}
}
return _dataSource;
}
编辑:使用[Entity findAllInContext:privateContext]
让获取我需要的记录,但现在我在访问一个实体中的错误关系时仍然卡住了:(