在我的应用程序中,我需要从数据库中读取一些数据,因此无论从哪个视图来看,我都会调用另一个包含所有数据库相关方法的类。
其中一种方法执行如下查询:
query = [NSString stringWithFormat: @"select * from orari where idutente=%d and date(orario)=date('now','localtime') order by orario", idUtente];
然后,我使用查询中的数据构建一个对象,并将所有对象添加到此方法返回的 NSMutableArray 中。
我省略了这个方法的所有代码,因为我没有问题并且让问题更清楚。
表“orari”最多可以有 18000 条记录,我注意到,仅对大约 6000 条记录执行该查询,模拟器需要大约 4 到 6 秒。于是想到了在后台队列中执行这个方法,这样主线程就不会被阻塞了。
所以我尝试过:
- (NSMutableArray *)NextGroup: (int)opt :(int)id {
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^(void) {
....
here I execute my query, build the objects and add them all to my NSMutableArray
....
});
return myArray;
}
现在的问题是回报。如果我把它放在 dispatch_async 块中,我会得到错误:“不兼容的块指针类型将'NSMutableArray *(^)(void)' 传递给'dispatch_block_t'类型的参数(又名'void (^)(void)')” .
如果我把它放在块外,它将是空的。
如何将 NSMutableArray 从块传递给方法,然后返回调用它的视图?