2012-02-08 2 views
5

私はを使用している場合、私はこの非同期要求を追加して以来、私は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

実際にエラーが発生していない場合は、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

このXcodeのエラーが発生します。

ブロック内では、error:&errorが問題なく動作します。

関連する問題