Objective c Can';t返回NSMutableArray值
有人能告诉我为什么不能返回NSMutableArray吗:Objective c Can';t返回NSMutableArray值,objective-c,ios,methods,Objective C,Ios,Methods,有人能告诉我为什么不能返回NSMutableArray吗: -(NSMutableArray)makeServiceRequest:(UIViewController *)sender { NSMutableString *urlString= [NSString stringWithFormat:@"http://www.servicedata/%@", _searchValue]; dispatch_async(dispatch_get_global_queue(DIS
-(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;
});
});
}
我已经在头文件中很好地声明了它。有没有办法把它变成一个类方法
json
是一个(NSMutableArray*)
而您的函数返回(NSMutableArray)
json
是一个(NSMutableArray*)
而您的函数返回(NSMutableArray)
如前所述,您遗漏了一个*。要理解这意味着什么,你应该阅读一些关于Objective-C的“入门”。例如,苹果的Objective-C入门教程:
有没有办法把它变成一个类方法
回答第二个问题,如果我没弄错的话:你必须把开头的破折号改成加号。这相当于Java中的关键字“static”:
就像我解释的,你错过了一个*。要理解这意味着什么,你应该阅读一些关于Objective-C的“入门”。例如,苹果的Objective-C入门教程:
有没有办法把它变成一个类方法
回答第二个问题,如果我没弄错的话:你必须把开头的破折号改成加号。这相当于Java中的关键字“static”:
您无法做到这一点,您调度块相当于创建另一个线程并释放它,当您的块执行方法makeServiceRequest已执行且不再在范围内时,您需要做的是通知调用方其请求已通过协议或通知完成。。。水流是这样的
- 调用方调用该方法
- 方法执行,在不同的线程上启动块并返回
- 来电者继续他的生意
- 最后执行块,为了返回调用方,我们需要使用协议或通知(还有其他方法,但这两种方法是最好的)
如果您想了解NSNotifications check out您无法做到这一点,则分派块相当于创建另一个线程,并在块执行方法makeServiceRequest时将其释放,makeServiceRequest已执行且不再在范围内,您需要做的是通知调用者他们的请求是通过协议或通知完成的。。。水流是这样的
- 调用方调用该方法
- 方法执行,在不同的线程上启动块并返回
- 来电者继续他的生意
- 最后执行块,为了返回调用方,我们需要使用协议或通知(还有其他方法,但这两种方法是最好的)
如果您想了解NSNotifications,请检查return语句是否在块中。将块视为其自身的某种功能。块有参数和返回类型,就像函数或方法一样。dispatch_async不接受任何参数,也没有返回类型,因此它不希望您尝试在该块中返回
此外,该块可能会在下一个运行循环中运行。在代码运行时,您将已经退出makeServiceRequest:方法,并且该方法不会返回任何内容。我猜代码中有一个警告,类似于“Control到达非void函数的末尾”。返回语句在块中。将块视为其自身的某种功能。块有参数和返回类型,就像函数或方法一样。dispatch_async不接受任何参数,也没有返回类型,因此它不希望您尝试在该块中返回
此外,该块可能会在下一个运行循环中运行。在代码运行时,您将已经退出makeServiceRequest:方法,并且该方法不会返回任何内容。我猜代码中有一个警告,类似于“控件到达非void函数的末尾”。即使你是对的,这也不能解决海报的问题。即使你是对的,这也不能解决海报的问题。可能是你可以创建一个数组属性并在方法中设置它,以后在整个类中都可以使用它。可能是您可以创建一个数组属性并在方法中设置它,以后在整个类中都可以使用它。协议还是通知?我得读一下。我已经从前端开始学习,我仍然在学习oc(难度是10倍)。太多了!(如果你能告诉我如何发送一个简单的通知,让我的其他方法开始运行,你将是最好的!)tks人!你是最棒的!这几点确实有助于我理解这件事的流程。只有一个问题。通知方法(观察者)始终处于启用状态?@88fsantos您将始终拥有[NSNotificationCenter defaultCenter],并且您可以始终添加和删除观察者是..协议还是通知?我得读一下。我已经从前端开始学习,我仍然在学习oc(难度是10倍)。太多了!(如果你能告诉我如何发送一个简单的通知,让我的其他方法开始运行,你将是最好的!)tks人!你是最棒的!这几点确实有助于我理解这件事的流程。只有一个问题。通知方法(观察者)始终处于启用状态?@88fsantos您将始终拥有[NSNotificationCenter defaultCenter],并且您可以始终添加和删除观察者是..这仍然不是实际问题!好啊我错过了,但是我怎么能在json被填充的时候返回那个值呢?把它转换成类方法是没有用的。@bbum:我从来没有说过把它转换成类方法可以解决这个问题。88F桑托斯只是问如何做…这仍然不是这里的实际问题!好啊我错过了,但是我怎么能在json被填充的时候返回那个值呢?把它转换成类方法是没有用的。@bbum:我从来没有说过把它转换成类方法可以解决这个问题。88F桑托斯只是问怎么做…嗯,我
+ (NSMutableArray*)makeServiceRequest:(UIViewController *)sender