如何从使用块来回收数据的方法返回对象?

时间:2016-02-22 23:15:17

标签: ios objective-c

我已经远离iOS和编程很长一段时间并重新开始使用它而我在如何最好地处理将数据返回到另一个类的方法中的块时感到迷茫。

我创建了一种从互联网上下载一些数据的方法。

-(NSArray*) getDataFromWeb
{
    DataSync * dataS = [[DataSync alloc] init];

    [dataS downloadData:@"Full"
                              successBlock:^(NSArray *dataArray)
     {
         NSLog(@"Data : %@", dataArray);
         myDataArray = [dataArray copy];
     }
                                errorBlock:^(NSError *error)
     {
         NSLog(@"ERROR: %@",error);
     }];


return myDataArray;
}

通常在过去我会有一个返回语句返回数组。但是因为块没有在另一个线程上获取数据,所以返回将过早触发并且数据不会被检索,我只是得到(null)返回。

在块完成工作并使用数据填充数组后,建议将数据传递回另一个被调用此方法的类的方法是什么?我可以在块的每个成功或错误部分中有两个返回状态吗?

1 个答案:

答案 0 :(得分:0)

有两种选择。

没有。 1,我不推荐这个,是等待块完成并返回值。就像我说的那样,除非你真的知道自己在做什么,否则你应该避免这种情况,因此,我不打算详细介绍它的实现。

没有。 2是不返回值,而是用完成块处理它。基本上,您使函数返回void,并使用object参数添加block参数。调用此方法看起来很像调用downloadData

假设您的方法现在看起来像-(void)getDataFromWebWithCompletion:(CompletionBlock)block,在downloadData的块的末尾,您可以执行以下操作:

if(block){
  block(dataArray)
}