2012-02-08 10 views
5

जब से मैं इस async अनुरोध कहा, मैं अगर मैं तो मेरे कोड ठीक चलाता है का उपयोग 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]; 
     ... 
    }); 
}]; 
... 

का एक xcode त्रुटि मिल रही है, लेकिन मैं के बारे में नहीं असहज महसूस त्रुटियों का उपयोग .. मुझे क्या करना चाहिए?

+0

यदि आप वास्तव में त्रुटि के साथ कुछ भी नहीं कर रहे हैं तो आप बस नल पास कर सकते हैं। आप आमतौर पर यह पता लगा सकते हैं कि कोई त्रुटि तब तक हुई है जब विधि शून्य हो जाती है, इसलिए ऐसा नहीं है कि आप इस तथ्य को याद करेंगे कि त्रुटियां हो रही हैं। –

उत्तर

11

संभवतया ऐसा इसलिए है क्योंकि आप पूरा करने वाले हैंडलर में error आपके पास पारित कर रहे हैं। इसे __strong के रूप में पारित किया जाएगा और फिर आप इसे __autoreleasing होने की आवश्यकता है। इस कोड को बदलने का प्रयास करें:

... 
[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 त्रुटि होता है जब NSError *error=nil; परिभाषा बाहर^ब्लॉक डाल दिया।

ब्लॉक के अंदर, तो error:&error ठीक काम करता है।