2011-07-26 9 views
1

私は何らかのエラー処理をiOSアプリケーションに取り入れようとしています。私がNSURLConnectionのエラー出力パラメータ&を見ています。私はNSErrorへの参照を渡そうとしています。それから私はチェーンを通して渡し続けます。合格エラー代理人

最初の機能は、私のDALにメソッドを呼び出す:

NSError *error = nil; 
SearchResult *res = [db getHereditaments:&error]; 
if (error) { 
    [self performSelectorOnMainThread:@selector(DisplayError:) withObject:error waitUntilDone:NO]; 
    //todo: handle error 
} else { 
    [self performSelectorOnMainThread:@selector(DisplayResults:) withObject:res waitUntilDone:NO]; 
} 

そして(と呼ばれる)第2の方法は、エラーをダウン通過しようとします。これは、NSErrorがnilであるかどうかのチェックを追加してこのケースのデータが返されるまで正常に機能したので、なぜエラーも返されますか?

と呼ばれる方法がある:

-(SearchResult *) getData:(NSError**)error { 
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
NSString *userName = [prefs stringForKey:UsernameKey]; 
NSString * password = [prefs stringForKey:PasswordKey]; 

NSURL *url = [UrlUtility getSearchResults:userName passwordHash:password]; 
CXMLDocument *responseObj = [UrlUtility xmlDocWithUrl:url onError:&error]; 
if(error ==nil){// should be nil if the connection was successful shouldn't it? 
+0

'nil'をテストすると何が動作しませんか? –

+0

プログラムの流れは私にとって本当にはっきりしませんが、なぜエラーポインターを2番目の関数に渡そうとしたのでしょうか?エラーが発生した場合は、エラー変数で2番目の関数を呼び出す際のポイントがありますか?これとは別に、返されるオブジェクトがnilであるかどうかをチェックする必要があります。エラーが発生した場合はエラーが発生し、その時点でエラー変数をチェックする必要があります。最初にresponseObjがnilであるかどうかを確認し、そうであればエラー変数をチェックすることができます。 ** P.S。:**あなたは '+ xmlDocWithUrl:onError:'のコードを表示できますか?問題の原因はこのメソッドにある可能性があります。 –

答えて

2

OK]をクリックして、あなたがチェーンの下に同じエラーを渡している最初のすべての場合は、メソッドに& *エラーを渡す必要があります。

第2に、エラーポインターを扱う場合、通常、エラーではなくエラーを扱いたいと思っています。

第3に、エラー== nilであるかどうかを確認するべきではありません。 responseObj == nilかどうかを確認する必要があります。それが本当であればエラーを使うことができます。もしそうでなければ、エラーを起こすべきではありません。

最後に、被験者と完全には関連していませんが、デベロッパーとして役立つはずです。メソッド名の先頭に「get」を使用しないでください。 getは、参照によってさまざまな値を返すためにのみ使用されています。これは一般的に避けるべきです。あなたのメソッドはおそらくdownloadSearchResultsWithError:とURLForSearchResultsWithUsernameのようなものでなければなりません:パスワード:

+0

&*エラーについての良い点、私は投票します。 – AechoLiu

関連する問題