8

iOS 6アプリのJSONを解析しようとしていますが、動作しないようです。私はたくさんのフォーラムを精査しましたが、機能する、実装するのに十分理解している、または適用できるソリューションを見つけられませんでした。

見逃したものがありましたらお詫び申し上げます。

まず、テスト用のWebサービスがあります。これは、私が知る限り、有効なJSONを返します。

http://thetrouthunter.com/SVLocationsAPI.php

次に、Objective-Cコードは次のとおりです。

+ (NSDictionary *)connectToService:(NSString *)query
{
    NSError *error = nil;

    query = [NSString stringWithFormat:@"%@&format=json&nojsoncallback=1", query];
    query = [query stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSData *jsonData = [[NSString stringWithContentsOfURL:[NSURL URLWithString:query] encoding:NSUTF8StringEncoding error:nil] dataUsingEncoding:NSUTF8StringEncoding];

    NSDictionary *results = jsonData ? [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error] : nil;

    NSLog(@"locations: %@", results);

    if (error)
        NSLog(@"[%@ %@] JSON error: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), error.localizedDescription);

    return results;
}

+ (NSArray *)userLocation {
    NSString *request = [NSString stringWithFormat:@"http://thetrouthunter.com/SVLocationsAPI.php"];
    return [[self connectToService:request] valueForKeyPath:@"locations.location"];
}

ls NSLog関数は、「操作を完了できませんでした。(Cocoaエラー:3840)」というエラーを出力しています。

なぜそうなのか理解できません。私はいろいろなことを試しました。

4

1 に答える 1

4

%@&format=json&nojsoncallback=1のURLに追加するconnectToService:と、その新しいURLは、期待するJSONではなくWebページになります(つまり、http://thetrouthunter.com/SVLocationsAPI.php&format=json&nojsoncallback=1)。

JSONを取得するまで(つまり、シリアル化関数を呼び出す前に)これをデバッグできるように、HTTPリクエストからの実際の結果をログに記録すると便利な場合があります。

于 2013-03-20T20:47:10.930 に答える