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可以为你做到这一点)。