基本上:一个方法需要返回一个在dispatch_async中获取的NSDictionary。这是我尝试过的:
- (NSDictionary *)fetchNSDictionary {
dispatch_queue_t Queue = dispatch_queue_create("Dictionary fetcher", NULL);
dispatch_async(Queue, ^{
NSDictionary *dict = ...
dispatch_async(dispatch_get_main_queue(),^{
return dict;
)};
)};
}
Result:
Incompatible block pointer types passing 'NSDictionary *(^)(void)'
to parameter of type 'dispatch_block_t' (aka 'void (^)(void)')
有任何想法吗?
当你说return dict;
,你实际上是在尝试返回dict
发送给调度块(运行后台异步的自动化进程)的调用者 - 这是行不通的。
由于您使用的是异步方法,因此您无法将块中接收到的数据返回到启动网络操作的方法。当调用该块中的代码时,系统早已完成该方法的执行。
相反,您需要做的是设置一个委托系统 - 如果这是一个辅助类,您可以添加一个协议,其中包括类似的方法didFinishLoadingStuff:(NSDictionary *)stuff
.
然后你会改变
- (NSData *) fetchNSDictionary{...}
对于类似的东西
- (void)getDictionaryWithDelegate:(NSObject<StuffGetterProtocol> *)delegate{...}
而不是return dict;
,你会说:
[delegate didFinishLoadingStuff:dict];
当然,在您调用它的任何类中实现委托方法:
- (void)didFinishLoadingStuff:(NSDictionary *)stuff
{
//do something with stuff
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)