2013-10-16 2 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

아무 곳에 나 저장하지 않으므로'completion'을 복사 할 필요가 없습니다. 'completionBlock'에 할당하지 않기 때문에'__block' 변수가 필요하지 않습니다. – newacct

답변

1

bah ... 완료 처리기가 nil 인 함수에 대한 다른 호출에서 코드가 죽어 가고있었습니다. 이 문제를 해결했습니다 :

if(completionBlock){ 
    completionBlock(error); 
} 
관련 문제