Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在块范围外设置对象,在块内设置对象';s范围_Iphone_Objective C_Objective C Blocks - Fatal编程技术网

Iphone 在块范围外设置对象,在块内设置对象';s范围

Iphone 在块范围外设置对象,在块内设置对象';s范围,iphone,objective-c,objective-c-blocks,Iphone,Objective C,Objective C Blocks,如何在块范围外设置对象,而在块范围内设置对象 我的代码目前是这样的,但当我调用NSLog(@“%d”,self-publicFeed]count])时,它就不起作用了 - (NSArray *) publicFeed { __block NSArray *returns = nil; [[APIRequester sharedRequester] getPublicFeedCompletion:^(NSArray *array) { returns = array

如何在块范围外设置对象,而在块范围内设置对象

我的代码目前是这样的,但当我调用
NSLog(@“%d”,self-publicFeed]count])
时,它就不起作用了

- (NSArray *) publicFeed {
    __block NSArray *returns = nil;
    [[APIRequester sharedRequester] getPublicFeedCompletion:^(NSArray *array) {
        returns = array;
    } fail:^(NSError *error) {

    }];
    return returns;
}

问题出在这里。正如您所期望的那样调用这些块,但实际情况如下:

  • Declare
    返回为数组
  • 调用
    -[APIRester getPublicFeedCompletion:fail:
  • 方法返回
    返回
    (即
    nil
    )。
    ~~~~~~
  • 在将来的某个时间,
    返回
    设置为
    数组

  • 您必须以某种方式更改代码,以确保在方法返回之前设置了
    返回值。

    问题出在这里。正如您所期望的那样调用这些块,但实际情况如下:

  • Declare
    返回为数组
  • 调用
    -[APIRester getPublicFeedCompletion:fail:
  • 方法返回
    返回
    (即
    nil
    )。
    ~~~~~~
  • 在将来的某个时间,
    返回
    设置为
    数组

  • 您必须以某种方式更改代码,以确保在方法返回之前设置了
    returns

    您是否使用故障块检查错误并查看发生了什么?我对APIRester类进行了编码,没有错误…首先,前面带有
    get
    的方法在Objective-C/Cocoa中意味着非常具体的东西,不是这样;放下
    get
    。其次,如果您创建只接受一个块参数的方法,那么您的API将更加令人愉快。上述代码中的错误处理块是噪声;它几乎肯定需要来自完成块的状态,因此,将两者分开只会增加复杂性。我建议添加一个
    NSError**
    指针。您是否使用故障块检查错误并查看发生了什么?我对APIRester类进行了编码,没有错误……首先,前面带有
    get
    的方法在Objective-C/Cocoa中意味着非常具体的东西,不是这样;放下
    get
    。其次,如果您创建只接受一个块参数的方法,那么您的API将更加令人愉快。上述代码中的错误处理块是噪声;它几乎肯定需要来自完成块的状态,因此,将两者分开只会增加复杂性。我建议添加一个
    NSError**
    指针。有哪些选项?使API调用同步?这是一种方法。另一种方法是让完成块与关心返回值更改的人进行通信。我该怎么做?它将在op中的方法中。有哪些选项?使API调用同步?这是一种方法。另一种方法是让完成块与关心返回值更改的人进行通信。我该怎么做?它将出现在op中的方法中。