2
NSError *error;
NSString *string = [[NSString alloc]
                    initWithContentsOfURL:URL
                    encoding:NSUTF8StringEncoding
                    error:&error];

iPhoneでこれをテストすると、wifiがオンになっていると常に機能します。ただし、3G を使用しているときは、しばしば nil になります。おそらく15回連続して試すと(これには更新ボタンがあります)、最終的に目的の結果が得られます。

私の質問は、この問題はサーバー側にあるのか、それともコードが不安定なのかということです。より安全にデータを取得するには、別のアプローチを使用する必要がありますか?

4

2 に答える 2

1

あいまいな回答しか得られないほど十分な情報が提供されていませんが、ここにはいくつかの選択肢があります。

最も重要なことはerror、結果を出力する必要がある " " パラメータがあることです。NSString クラスで使用できる少し優れた API もあります。

コードを次のように変更します。

NSError *error = NULL;
NSStringEncoding actualEncoding;

// variable names in Objective-C should usually start with lower case letters, so change
// URL in your code to "url", or even something more descriptive, like "urlOfOurString"
NSString *string = [[NSString alloc] initWithContentsOfURL:urlOfOurString usedEncoding:&actualEncoding error:&error];
if(string)
{
    NSLog( @"hey, I actually got a result of %@", string);

    if(actualEncoding != NSUTF8StringEncoding)
    {
        // I also suspect the string you're trying to load really isn't UTF8
        NSLog( @"and look at that, the actual encoding wasn't NSUTF8StringEncoding");
    }
} else {
    NSLog( @"error when trying to fetch from URL %@ - %@", [urlOfOurString absoluteString], [error localizedDescription]);
}
于 2013-03-07T01:55:15.810 に答える
1

代わりにSTHTTPRequestを使用しています。使いやすく強力なこのライブラリを強くお勧めします。

于 2013-03-20T13:34:05.673 に答える