我正在使用基于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];
}发布于 2011-10-31 03:31:06
NSDictionary中的条目没有固有的顺序;它们没有按定义排序。allValues返回的数组也是如此,文档中明确指出:
未定义数组中值的顺序。
之后,您需要对数组进行排序。如果希望保持与JSON源中相同的排序顺序,则必须手动解析JSON数据并从字典中逐个检索值。或者,如果您知道JSON数据是如何排序的,只需对allValues返回的数组应用相同的排序算法即可。
发布于 2012-05-05 05:23:35
您不应该使用JSON字典来存储顺序很重要的内容。正如http://json.org/所说
对象是一组无序的名称/值对。
https://stackoverflow.com/questions/7947234
复制相似问题