2013-10-16 56 views
0

我正在尝试创建一个接受完成处理程序块的包装方法,该方法块又被传递给另一个完成处理程序。问题是,无论我做什么,我的完成处理程序在被调用之前都会被释放。以下是删除了大部分逻辑的方法。将块传递给iOS中的块

+ (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; 
} 
+0

你不需要复制'完成',因为你没有存储在任何地方。你也不需要'__block'变量,因为你永远不会分配到'completionBlock'。 – newacct

回答

1

bah ...代码是从另一个调用死亡完成处理程序为零的函数。这固定它:

if(completionBlock){ 
    completionBlock(error); 
}