0

これが私の質問です。アプリがリモート JSON ファイルを読み込めない場合にエラーを表示するにはどうすればよいですか? コンピューターで Wi-Fi をオフにし、シミュレーターでアプリを実行しました。接続があった場合に表示されるはずのメッセージを NSLogs します。どうすればこれを修正できますか? ありがとう。

これが私のコードです:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *jsonStr = @"http://xxx.com/server.php?json=1";
    NSURL *jsonURL = [NSURL URLWithString:jsonStr];
   // NSData *jsonData = [NSData dataWithContentsOfURL:jsonURL];
   // NSError *jsonError = nil;
    NSURLRequest *jsonLoaded = [NSURLRequest requestWithURL:jsonURL];

    if(!jsonLoaded) {

        UIAlertView *alertView = [[UIAlertView alloc] init];
        alertView.title = @"Error!";
        alertView.message = @"A server with the specified hostname could not be found.\n\nPlease check your internet connection.";
        [alertView addButtonWithTitle:@"Ok"];
        [alertView show];
        [alertView release];
        NSLog(@"No connection, JSON not loaded...");

    }
    else {
        NSLog(@"JSON loaded and ready to process...");
    }
}
4

2 に答える 2

1

コードはリクエストを作成するだけです。実際にはデータをフェッチしません。NSURLConnectionを使用してデータを取得する必要があります。

データを取得するには複数の方法があります。この例は、iOS 5.0 以降を対象としています。

NSOperationQueue *q = [[[NSOperationQueue alloc] init] autorelease];
NSURLRequest *jsonRequest = [NSURLRequest requestWithURL:jsonURL];
[NSURLConnection sendAsynchronousRequest:jsonRequest
                                   queue:q
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                           // data was received
                           if (data)
                           {
                               NSLog(@"JSON loaded and ready to process...");
                               // ... process the data
                           }
                           // No data received
                           else
                           {
                               NSLog(@"No connection, JSON not loaded...");
                               // ... display your alert view
                           }
                       }];
于 2012-11-04T15:06:09.067 に答える
0

あなたはまだ何も要求していません。リクエストの方法については、こちらをお読みください。

基本的に、やりたいことは、NSURLConnectionDelegateプロトコルを実装し、connection:didFailWithError:関数をオーバーライドして失敗イベントをリッスンすることです。

于 2012-11-04T14:50:58.317 に答える