0

デバイスでアプリケーションを実行すると、NSURLRequest デリゲート メソッドが呼び出されません。ただし、シミュレーターでは完全に機能します。また、接続がデータを受信した後にのみビューをロードできるようにするため、リクエストが完了する前にビューをロードする場合もありません。

URL を要求する私のコードはこちらです。どんな助けでも大歓迎です。

- (void)viewWillAppear:(BOOL)animated
{ 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://-dev01x/content"]; cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];
    [request setHTTPMethod:@"GET"];
    _getData = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    NSLog(@"HELLO %@",_getData);
}
4

2 に答える 2

2

ここで提供されるコードは意味がありません:

_getData = [[NSURLConnection alloc] initWithRequest:request delegate:self];

その行は NSURLConnection オブジェクトへのポインターを返します。変数名は誤解を招きます。この時点でブロックしたい場合 (そしてそれが機能する場合) は、その時点で sendSynchronousRequest を使用する必要があるようです。

私はあなたがやりたいことと似たようなことをしますが、より伝統的な方法で行います。viewDidLoad または initWithFrame でさえ、非同期接続を開始し、フラグを設定し、ビューの backgroundColor を黒または白に設定します (通常はスピナーを使用します)。viewWillAppear を取得し、接続が完了していればすべて問題なく、さまざまな UI 要素を設定します。そうでない場合は何もせず、後で接続が完了したら、スピナーをプルダウンして UI を更新します。

あなたがしようとしている時点でメインスレッドをブロックするために私が考えることができる唯一の方法は、その同期要求を使用することです(これは私見がこれに対処するための本当に悪い方法です)。

バックグラウンドで処理を行うことの利点は、処理に時間がかかりすぎる場合、ユーザーが [戻る] ボタンをタップするか、アプリ内の別の場所に移動できることです (この場合、接続をキャンセルしてすべてを破棄します)。

于 2012-09-12T11:37:11.037 に答える
1

ブラウザでチェックしたときにNSMutableURLRequestに提供するURLを確認しても何も返されない

ここに画像の説明を入力

NSMutableURLRequest には有効な URL が必要です

于 2012-09-12T10:43:58.563 に答える