2013-10-16 54 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); 
}