Objective c Can';t返回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吗:

-(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