3

別の NSArray をパラメーターとして完了ブロックメソッドに渡したいのですが、この概念は初めてなので、その方法を理解できません。現在、1つの配列のみを渡していますが、2番目の nsarray を渡したいです。 2番目の配列では、値を含む配列で渡したいので、そこで使用できます

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

呼び出し方法

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

上記のメソッドで NSArray を渡したいのですが、このメソッドは別のクラスにあり、別のから呼び出しています。この配列はこのメソッドで使用されています。

4

2 に答える 2

4

C 関数と同じように呼び出すことができます。たとえば、 I have defined a new class 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
)
于 2013-05-09T14:32:58.547 に答える
0

配列を完了ブロックに渡すのはあなたの責任ではありません。あなたが説明している状況では、完了ブロックを呼び出すのは getMoreData であるため、ブロックに配列を渡すのはそのメソッドです。

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

    ...some code...
}

あなたの責任は、getMoreData メソッドで作成された配列を利用する完了ブロックを渡すことだけです。

于 2013-05-09T14:32:36.060 に答える