我正在使用基于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];
}
答案 0 :(得分:2)
NSDictionary
中的条目没有固有的顺序;根据定义,它们没有排序。 allValues
返回的数组也是如此,正如文档明确指出的那样:
未定义数组中值的顺序。
之后你需要对数组进行排序。如果要保持JSON源中的相同排序顺序,则必须手动解析JSON数据并逐个从字典中检索值。或者,如果您知道JSON数据的排序方式,只需将相同的排序算法应用于allValues
返回的数组。
答案 1 :(得分:1)
您不应该使用JSON字典来存储其订单重要的事物。正如http://json.org/所说
对象是一组无序的名称/值对。