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;
}
问题出在这里。正如您所期望的那样调用这些块,但实际情况如下:
将
返回为数组-[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中的方法中。