2011-10-31 16 views
7

Convert NSData bytes to NSString?の記事、特に@ christo16のおかげで感謝しています。以前はPHPサーバーから価値を得るためにASIHttpRequestに依存していました。今すぐ次のコード行を使用してください:NSDataのdataWithContentsOfURLがNULL値を返すのはなぜですか?

NSString *pageContents = [NSData dataWithContentsOfURL: [NSURL URLWithString:@"http://www.apple.com"]] 

私は望む機能を得ることができます。

しかし、なぜその行によってpageContentsがNULLになるのでしょうか。私はすでにこの行を次のように変更しています:

NSString *fullUrl = [NSString stringWithFormat:@"http://www.apple.com"]; 
NSURL *url = [[NSURL alloc] initWithString:fullUrl]; 
NSData *pageContents; 
NSString *response = NULL; 

while(response==NULL) 
{ 
    pageContents = [NSData dataWithContentsOfURL: [NSURL URLWithString:fullUrl]]; 
    response = [NSString stringWithUTF8String:[pageContents bytes]]; 
    NSLog(@"content = %@", response); 
} 

これを実行する方法はありますか?今までは問題ありません。私はデータを取得するときにエラーが発生した場合にはnilを返します同じ結果を達成するための、よりエレガントな方法があるかどうかを

おかげ

+1

この1ライナーの欠点は、おそらく長い間あなたのUIをブロックすることです。ループがさらに悪化します。サーバーが接続に応答していない場合は、UIが効果的にブロックされます(SpringBoardが疲弊してプロセスを停止するまで)。その情報については –

答えて

18

を疑問に思います。

dataWithContentsOfURL:options:error:メッセージを使用して、nilが返される理由を調べることができます。エラーは、渡したポインタNSError*に返されます。

+0

@Brighamに感謝します。しかし、問題は時にはヌル、時にはそうではないことです。だから、ヌルでない限り、試してみるだけです。 dataWithContentsOfURL:options:errorを使用している場合、どのように処理しますか? – swdev

+1

@swdev:何が間違っているのかを見つけ出すためにエラーを見て、間違ったことに適切に反応します。通常、これはユーザーにエラーを提示します。 –

1

おそらく画像が大きすぎるか、URLが正しくない可能性があります。

NSError* error = nil; 
NSData* data = [NSData dataWithContentsOfURL:yourURL options:NSDataReadingUncached error:&error]; 
if (error) { 
    NSLog(@"%@", [error localizedDescription]); 
} else { 
    NSLog(@"Data has loaded successfully."); 
} 
0

ネットワーク接続を確認してください。それが接続されている場合、問題は解決します。

関連する問題