任何人都可以告诉我为什么我不能在那里返回NSMutableArray:
-(NSMutableArray)makeServiceRequest:(UIViewController *)sender
{
NSMutableString *urlString= [NSString stringWithFormat:@"http://www.servicedata/%@", _searchValue];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData* data = [NSData dataWithContentsOfURL:
[NSURL URLWithString: urlString]];
NSError* error;
NSMutableArray *json = [NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:&error];
dispatch_async(dispatch_get_main_queue(), ^(){
NSLog(@"json arrived");
return json;
});
});
}
我已经在头文件中声明了它。有没有办法把它变成一个类方法?
答案 0 :(得分:3)
json
是(NSMutableArray *)
,而您的函数返回(NSMutableArray)
答案 1 :(得分:3)
你不能这样做,你的调度块相当于创建另一个线程并让它去,当你的块执行方法makeServiceRequest已经执行并且不再在范围内时,你需要做什么通知调用者他们的请求是通过协议或通知完成的......流程就像
如果您想了解NSNotifications,请查看this questions
答案 2 :(得分:1)
该返回语句位于块内。将块视为其自身的各种功能。块具有参数和返回类型,就像函数或方法一样。 dispatch_async不接受任何参数,也没有返回类型,因此它不会让您尝试在该块中返回。
此外,该块可能会在下一个运行循环中运行。在代码运行之前,您将退出makeServiceRequest:方法,并且不会从该方法返回任何内容。我猜这段代码中有一条警告,上面写着“控制到达无效功能的结束”。
答案 3 :(得分:-1)
就像Anila解释的那样,你错过了*。要理解这意味着你应该阅读Objective-C的一些“入门”。例如Apple关于Objective-C的入门教程:Learning Objective-C: A Primer
无论如何要把它变成一种类方法?
要回答你的第二个问题,如果我做对了:你必须将开头的破折号更改为加号。这相当于Java中的关键字“static”:
+ (NSMutableArray*)makeServiceRequest:(UIViewController *)sender