2012-02-08 24 views
5

Kể từ khi tôi thêm yêu cầu async này, tôi nhận được một lỗi xcode của Sending 'NSError *const __strong *' to parameter of type 'NSError *__autoreleasing *' changes retain/release properties of pointerloại ios 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]; 
     ... 
    }); 
}]; 
... 

Nếu tôi sử dụng sau đó mã của tôi chạy tốt, nhưng tôi cảm thấy không thoải mái về không sử dụng lỗi .. Tôi nên làm gì?

+0

Nếu bạn không thực sự làm bất cứ điều gì với lỗi bạn cũng có thể chỉ cần vượt qua NULL. Bạn thường có thể phát hiện nếu một lỗi đã xảy ra anyway bởi vì phương thức trả về nil, do đó, nó không giống như bạn sẽ bị thiếu thực tế là các lỗi đang xảy ra. –

Trả lời

11

Có lẽ vì bạn đang sử dụng lại số error được chuyển cho bạn trong trình xử lý hoàn tất. Nó sẽ được chuyển thành __strong và sau đó bạn chuyển nó ở nơi được yêu cầu là __autoreleasing. Hãy thử thay đổi mã này:

lỗi
... 
[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

Xcode này xảy ra khi đưa NSError *error=nil; nét ngoài các^khối.

Bên trong khối, sau đó error:&error hoạt động tốt.

Các vấn đề liên quan