2012-02-08 4 views
5
나는이 비동기 요청을 추가 한 이후

, 내가 error:nil 다음 내 코드가 잘 실행 사용하는 경우 나는 Sending 'NSError *const __strong *' to parameter of type 'NSError *__autoreleasing *' changes retain/release properties of pointerIOS NSError 유형

... 
[NSURLConnection sendAsynchronousRequest:req queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLData:data error:&error]; 
     ... 
    }); 
}]; 
... 

의 엑스 코드 오류를 받고 있어요,하지만 난하지에 대해 불안을 느낄 오류를 사용하여 .. 어떻게해야합니까?

+0

실제로 오류가 발생하지 않으면 NULL을 전달할 수 있습니다. 메소드가 nil을 리턴하기 때문에 어쨌든 오류가 발생했는지 감지 할 수 있습니다. 따라서 오류가 발생하고 있다는 사실을 놓치지 않을 것입니다. –

답변

11

아마도 완료 핸들러에서 error을 다시 사용했기 때문입니다. 그것은 __strong으로 전달 될 것이고 __autoreleasing이 될 필요가있는 곳에 전달합니다. 이 코드를 변경해보십시오 : 외부^블록을 NSError *error=nil; 정의 을 넣을 때

... 
[NSURLConnection sendAsynchronousRequest:req queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     NSError *error2 = nil; 
     NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLData:data error:&error2]; 
     ... 
    }); 
}]; 
... 
2

이 엑스 코드 오류가 발생합니다.

블록 내부에서 error:&error이 정상적으로 작동합니다.

관련 문제