JSONkit排序问题

时间:2011-10-30 19:26:20

标签: objective-c ios nsdictionary jsonkit

我正在使用基于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];
}

2 个答案:

答案 0 :(得分:2)

NSDictionary中的条目没有固有的顺序;根据定义,它们没有排序。 allValues返回的数组也是如此,正如文档明确指出的那样:

  

未定义数组中值的顺序。

之后你需要对数组进行排序。如果要保持JSON源中的相同排序顺序,则必须手动解析JSON数据并逐个从字典中检索值。或者,如果您知道JSON数据的排序方式,只需将相同的排序算法应用于allValues返回的数组。

答案 1 :(得分:1)

您不应该使用JSON字典来存储其订单重要的事物。正如http://json.org/所说

  

对象是一组无序的名称/值对。