0

完了ハンドラー ブロックを受け入れるラッパー メソッドを作成しようとしています。このブロックは、別の完了ハンドラーに渡されます。問題は、何をしても、完了ハンドラーが呼び出される前に割り当てが解除されることです。ほとんどのロジックを取り除いたメソッドを次に示します。

+ (int) syncWithCompletion:(void (^)(NSError *error))completion;{
    //Copy the block argument and make it available to the block scope
    __block void (^completionBlock)(NSError *error) = [completion copy];
    // The is an AFNetworking operation
    [af.sharedHTTPClient enqueueBatchOfHTTPRequestOperations:syncOperations progressBlock:nil completionBlock:^(NSArray *operations) {
        // Call my copied block... but it's already been deallocated
        completionBlock(error);
    }];
    return somevariable;
}
4

1 に答える 1

1

bah... 完了ハンドラが nil である関数への別の呼び出しにより、コードが停止していました。これで修正されました:

if(completionBlock){
    completionBlock(error);
}
于 2013-10-16T01:50:55.193 に答える