IOSsortingNSDictionary
开始,这是我的代码:
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]]; NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSDictionary *publicTimeline = [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonParsingError]; for (NSObject* key in publicTimeline) { id value = [publicTimeline objectForKey:key]; NSLog(@"%@", key); }
我在web服务上采取了一些新闻,并在tableView中显示它。
我的问题是,这些消息不按顺序显示。
在我的web服务中,新闻是为了,例如我有:
{"0":{"title":"News1"}} {"1":{"title":"News2"}} {"2":{"title":"News3"}}
等等..
但在循环中,我“松”这个命令:/而我想按照这个顺序有我的消息,首先在索引“0”之后的“1”等新闻…
(NSDictionary似乎松了这个命令,例如,我的代码后,我在我的tableview,消息:“2”,“0”,“1”,而不是我的新闻“0”,“1”,“ 2“)。
(我试过一些答案,但似乎没有在我的情况下:()
SOmeone帮助我? 谢谢,
这是我上次用来sorting我的字典的键。 希望你会更容易实现它:)
NSMutableArray *sortedArray = [NSMutableArray arrayWithArray:publicTimeline.allKeys]; [sortedArray sortUsingSelector:@selector(localizedStandardCompare:)];
你应该有sorting的键在sortedArray
你可以用这个工作:
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:publicTimeline]; [dict keysSortedByValueUsingComparator:^(id obj1, id obj2) { return (NSComparisonResult)[obj1 compare:obj2]; }];
然后用USE代替publicTimeline
。
希望这会有所帮助。
字典没有订单。 仅仅因为服务器以特定的顺序生成你的JSON并不意味着当你使用NSJSONSerialization
反序列化时它可以被维护。
如果您需要维护订单,则可以:
A.获取字典中的所有密钥并对其进行sorting。 然后,无论何时您需要按顺序访问(按索引),从数组中获取密钥并使用该密钥(不要迭代字典)。
B.使用不同的方法来反序列化JSON,它可以保存/提供有关事件处理顺序的数据(RestKit可以为你做到这一点)。