1

ユーザーが1つのビューを選択すると、情報を表示するためにXMLを解析する必要がありますが、XMLのダウンロードが完了していない場合があり、ユーザーがボタンを押して他のビューを選択し、クラッシュが発生することがあります。接続をキャンセルするか、新しい接続と競合しないようにする必要がありますが、正確な方法はわかりません。ViewWillDisappear にあるはずです。ViewDidAppearで接続を開始する方法は次のとおりです。

NSMutableURLRequest * req = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:@"http://Adress"]
                                                        cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20.0f];

conn = [NSURLConnection connectionWithRequest:req delegate:self];

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

if(conn)
{
    receivedData = [[NSMutableData alloc]init];
    [DSBezelActivityView newActivityViewForView:self.view withLabel:@"Loading..."];
}


- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    if(conn) [conn cancel];
}
4

2 に答える 2

3

NSURLConnectionのcancelメソッドを呼び出すことができます。これにより、接続デリゲートがそれ以上のデータで呼び出されるのを防ぐことができます。アプリがどのように機能するかを考えると、それが理にかなっている場合は、viewWillDisappearでこれを行うことができます。

于 2011-11-10T15:34:32.067 に答える
2

絶対にできますcancel NSURLConnection

ただし、キャンセルする場合も注意が必要です。

cancelで決めたらviewWillDisappear

それから

してはいけない、

autorelease

また、すべきではありません。

releaseそれはどこでも。

以下に簡単な説明を示します。

あなたcancelNSURLConnectionデリゲートをviewWillDisappear

[nsurlconnection cancel];

releaseまた、どこでもなくここに置く必要があります。

[nsurlconnection release];

受け取っconnectionた後にどこかでリリースすると、xml response

viewWillDisappearとにかくメソッドを呼び出しますが、

ここでキャンセルすると、アプリがクラッシュします。

「割り当て解除されたオブジェクトはキャンセルされません」

.

また、キャンセル中に別の状況が発生し、

ユーザーが来てすぐに他のビューを初めてナビゲートすると、メソッドnsurlconnectionでキャンセルされviewWillDisappearます。

再び、ユーザーがに来て、初期化または割り当てviewの直前にエスケープしますnsurlconnection。また、アプリがクラッシュするため、

「割り当て解除されたオブジェクトはキャンセルされません」。

connection != nilだから、あなたの前にあなたをチェックcancelし、また行うことを忘れないでください

nsurlconnection = nil;

同じ時に。

即時呼び出し [nsurlconnection cancel] クラッシュを回避できるようにします。

SO最後に、あなたがしなければならないあなたのviewWillDisappear方法では、

  1. nsurlconnection を確認する必要があります != nil
  2. キャンセルすればいい
  3. nsurlconnection に null を割り当てる必要があります
  4. 同じ方法でリリースする必要があります。

サンプルコードは以下のようになります。

- (void) viewWillDisappear:(BOOL)animated
{

if (nsurlconnection != nil)
{
[nsurlconnection cancel];
[nsurlconnection release];
nsurlconnection = nil;
}

}

お役に立てば幸いです...ハッピーコーディング...

于 2013-06-06T14:13:11.313 に答える