0

データを取得するためにRESTベースのWebサービスを使用しています。JSONドキュメントの構造に関係なく、NSDictionaryは同じ方法で入力されます。Webサービスが返されるときにソートを保持したい。

これが私のコードです:

-(void) getData
{
    NSURL *url = [NSURL URLWithString:@"http://somewebservice"];
    __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request setCompletionBlock:^{
        // Use when fetching text data
        NSString *responseString = [request responseString];

        NSDictionary *resultsDictionary = [responseString objectFromJSONString];


            [jokesArray release];
            jokesArray = [resultsDictionary allValues]; //always has the same order. 

            [jokesArray retain];


            [self.tableView reloadData];





        // Use when fetching binary data
  //      NSData *responseData = [request responseData];
    }];
    [request setFailedBlock:^{
        NSError *error = [request error];

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"An error occured" 
                                                        message:[error description]
                                                       delegate:nil 
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];
    }];
    [request startAsynchronous];
}
4

2 に答える 2

2

のエントリにはNSDictionary固有の順序はありません。それらは定義上ソートされていません。allValuesドキュメントに明確に記載されているように、によって返される配列にも同じことが当てはまります。

配列内の値の順序は定義されていません。

後で配列をソートする必要があります。JSON ソースと同じ並べ替え順序を維持する場合は、JSON データを手動で解析し、辞書から値を次々に取得する必要があります。または、JSON データがどのようにソートされるかを知っている場合は、同じソート アルゴリズムを によって返される配列に適用しますallValues

于 2011-10-30T19:31:05.563 に答える
1

順序が重要なものを格納するために JSON 辞書を使用するべきではありません。http://json.org/が言うように

オブジェクトは、名前と値のペアの順序付けられていないセットです。

于 2012-05-04T21:23:34.757 に答える