-1

私はこのようなコードを見ました:

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];

if(connection) {
    receivedData = [NSMutableData data];
} else {

}

どうすれば他の場所に入ることができますか?私は接続を無効にしようとしましたが、それでも他の場所には行かず、didFailWithErrorを通過します...それが必要かどうか疑問に思いますか?

4

2 に答える 2

1

このメソッドの戻り値に関するアップルのドキュメントには、次のように書かれています。

戻り値

URLリクエストのURL接続。接続を初期化できない場合はnilを返します。

これは、Cocoa(およびObjective-C)のベストプラクティスに精通していない人にとっては誤解を招く可能性があります。

通常、initメソッドはオブジェクトを返す必要があります。オブジェクトを返すという根本的な理由がない限り、危険です。他のほとんどの言語は、例外をスローすることでこのようなケースを処理し、無数のtry/catchブラケットを追加する必要があります。

たとえば、リクエストパラメータとしてaを渡すと、メソッドinitWithRequest:delegate:が返されます。そして正当な理由で。有用な目的を持たない接続オブジェクトを作成するのはなぜですか?nilnil

ただし、飛行機モードや無効なURLなどの状況を考えてみましょう。initWithRequest:delegate:戻ったばかりの場合nil、何が悪かったのかをどうやって知ることができますか?接続の呼び出しを許可するとconnection:didFailWithError:、エラーパラメータを通じて、特定の失敗についての洞察を得る機会が得られます。

接続のイベントを処理するnil必要があるかどうかについての質問に対処するには、次のようにします。接続の初期化に失敗した場合、接続デリゲートメソッドが呼び出されることはありません。したがって、コードがこれらのコールバックに依存して後続のリクエストを発行する場合は、そうする必要があります。

補足:NSMutableData有効な接続があることをまだ知らないため、ここでの作成は少し時期尚早です。私がここで与えた答えは、これを行う場所に関するいくつかの非常に基本的なサンプルコードを与えました。

于 2012-10-15T15:15:16.620 に答える
0

コードの他の部分に「データが見つかりません」というアラートをUIAlertView*thealert = [[UIAlertView alloc] initWithTitle:@ "Error" message:@ "Nodatafound。"として表示できます。デリゲート:自己cancelButtonTitle:@ "Ok" otherButtonTitles:nil]; [アラートショー]; [アラートリリース];

于 2012-10-15T11:41:34.767 に答える