0

NSDictonary にある json データを使用できる小さな部分に分割しようとしていますが、行き詰まっているようです。

私が使用している API から受け取っているデータは、現在の公共交通機関のデータです。これは私が受け取るデータです:

{
    Storingen =     {
        Gepland =         {
            Storing =             {
                Advies = "U kunt gebruikmaken van de omreisroute of de bussen reis tussen Alphen a/d Rijn en Gouda met de NS-bus reis vanaf zondag 29 april van Alphen a/d Rijn naar Gouda met de trein via Woerden reis tussen Leiden Centraal en Gouda via Den Haag Centraal";
                Bericht = "
\n        <p>
\n            <b>Wanneer: van zaterdag 28 april tot en met zondag 6 mei</b>
\n            <br/>
\n            <b>Oorzaak: door geplande werkzaamheden</b>
\n            <br/>
\n            <b>Advies: U kunt gebruikmaken van de omreisroute of de bussen</b>
\n            <br/>\treis tussen Alphen a/d Rijn en Gouda met de NS-bus<br/>\treis vanaf zondag 29 april van Alphen a/d Rijn naar Gouda met de trein via Woerden<br/>\treis tussen Leiden Centraal en Gouda via Den Haag Centraal<br/><br/><b>Extra Reistijd: een kwartier tot een half uur</b><br/></p>
\n    ";
                Oorzaak = "door geplande werkzaamheden";
                Periode = "van zaterdag 28 april tot en met zondag 6 mei";
                Traject = "Alphen a/d Rijn-Gouda";
                Vertraging = "een kwartier tot een half uur";
                id = "2012_apn_gd_28apr_6mei";
            };
        };
        Ongepland = "";
    };
}

私はこれを持っています:

-(void)loadJson
{
    dispatch_async(kBgQueue, ^{
        NSData* data = [NSData dataWithContentsOfURL:kJsonURL];
        [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
    });

}

- (void)fetchedData:(NSData *)responseData {
    NSError* error;
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
    NSDictionary *storingen = [json objectForKey:@"Storingen"];
    NSDictionary *gepland = [storingen objectForKey:@"Gepland"];

    NSLog(@"%@", json);

}

現在、API は 1 つの「Gepland」、計画済み、「保存」、誤動作のみを返しています。ただし、保存時にさらにメル関数が存在する可能性があります。API はこれを「Storing」キーの配列として返します。私の質問は、「アイテムを保存し、そのデータを使用して、ラベルが 1 つだけのテーブル ビューと、他のすべての情報を含む詳細ビューを作成するにはどうすればよいですか?」ということです。

4

1 に答える 1

1

ディクショナリのデータをテーブルのデータ ソースとして使用できます。その見返りとして、NSDictionaries を含む NSArray が得られると思います。したがって、次のようになります。

NSArray *storingen = [json objectForKey:@"Storingen"];

for (NSDictionary *storing in storingen ){
     NSString *advies = [storing objectForKey:@"Advies"];
}

ただし、JSON と一般的な paser の厄介な部分は、中断が 1 つしかない場合 (Een の格納は 1 つの中断です)、NSDictionary を取得し、それ以外の場合は NSArray を取得することです。次の方法で解決できます。

- (void)fetchedData:(NSData *)responseData {
    NSError* error;
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
    id storingen = [json objectForKey:@"Storingen"];
    NSDictionary *gepland = [storingen objectForKey:@"Gepland"];

    NSMutableArray *result = [[NSMutableArray alloc] init];

    if ([storingen isKindOfClass:[NSArray class]]) {
        result = storingen;
    }
    else {
        [result addObject:storingen];
    }
}

これで、storageen は常に配列になり、その配列を使用して UITableView に表示できます。

ベール大成功!

于 2012-05-03T08:51:46.377 に答える