我试图弄清楚如何让数据库获取在后台运行。下面是同一功能的前台和后台版本。前台版本有效。但是在后台版本中,局部变量 retval 永远不会被分配。在 pageInfoForPageKey 函数中放置一个断点告诉我该函数永远不会被调用。
块内是否可以使用 self ?
//foreground version
- (PageInfo*)objectAtIndex:(NSInteger)idx
{
return [[self dataController] pageInfoForPageKey:[[[self pageIDs] objectAtIndex:idx] integerValue]];
}
//background version
- (PageInfo*)objectAtIndex:(NSInteger)idx
{
__block PageInfo* retval = nil;
__block NSInteger pageID = [[[self pageIDs] objectAtIndex:idx] integerValue];
dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(aQueue, ^{
retval = [[self dataController] pageInfoForPageKey:pageID];
});
return retval;
}