如何将NSArray参数传递给完成块

时间:2013-05-09 14:11:17

标签: ios ios4

我想将另一个NSArray作为参数传递给完成块方法,因为我是这个概念的新手,我无法理解如何做到这一点。目前我只传递一个数组,但现在我想传递第二个nsarray,在第二个数组中我想传递带有值的数组,以便我可以在那里使用

typedef void(^completion)(NSArray *list);
 -(void) getMoreData:(completion) completion 

通话方式

[Magento.service getMoreData:^(NSArray *list ) {
        if(list){
                 }

在上面的方法我想通过NSArray,这个方法是在不同的类,我从不同的调用。此数组正在使用此方法。

2 个答案:

答案 0 :(得分:4)

您可以将其称为C函数,例如,我已声明了一个新类MyClass。接口文件的内容是:

typedef void(^completion)(NSArray *list);

@interface MyClass : NSObject

- (void)getMoreData:(completion)completionBlock;

@end

并在实施中

- (void)getMoreData:(completion)completionBlock
{
    // fullfil your array
    NSArray *array = @[@1, @2, @3];

    // call the completion block
    completionBlock(array);
}

我正在使用它如下:

MyClass *myClassInstance = [[MyClass alloc] init];
[myClassInstance getMoreData:^(NSArray *list) {
    if (list) {
        NSLog(@"%@", list);
    } else {
        NSLog(@"Nil array");
    }
}];

,输出为:

2013-05-09 16:29:00.676 Test[823:11303] (
    1,
    2,
    3
)

答案 1 :(得分:0)

将数组传递给完成块不是您的责任。在您描述的情况下,getMoreData调用完成块,因此它是将数组传递给块的方法。

- (void) getMoreData: (completion) completion
{
    ...some code...
    NSArray *array = [[NSArray alloc] init];
    if(completion)
        completion(array);

    ...some code...
}

您的责任只是传递一个完成块,该块将使用在getMoreData方法中创建的数组。