2014-02-20 48 views
0

开始,这是我的代码:IOS排序的NSDictionary

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); 
    } 

我采取一个webservice的一些消息,我表现出来的的tableView。

我的问题是,这些消息不按顺序显示。

在我的web服务,这个消息是为了,例如我有:

{"0":{"title":"News1"}} 
    {"1":{"title":"News2"}} 
    {"2":{"title":"News3"}} 

等。

但在循环中,我“宽松”这个命令:/我想我的消息在这个顺序,首先与索引“0”之后的“1”等新闻...

(NSDictionary似乎松散此顺序,例如,我的代码后,我有我的tableview,消息:“2”,“0”,“1”,而不是我的消息“0”,“1”,“2”。)

(我试过一些答案,但似乎没有工作在我的情况:()

SOmeone帮我吗? THX,

+0

您的排序键按索引是什么意思?我可以看到嵌套的字典?你想要什么? – Mani

+0

通过索引,我想表示在我的webservice中存在的数字,在这里它是“0”,“1”,“2”等... – deveLost

+0

而问题是,NSDictionary似乎松散了这个顺序,例如,在我的代码之后,我在我的tableview中看到消息:“2”,“0”,“1”,而不是我的消息“0”,“1”,“2”。 – deveLost

回答

5

这是我上次用来排序我的字典的键。希望这将是您更轻松地实现它:)

NSMutableArray *sortedArray = [NSMutableArray arrayWithArray:publicTimeline.allKeys]; 
[sortedArray sortUsingSelector:@selector(localizedStandardCompare:)]; 

而且你应该有sortedArray

+0

是啊!谢谢洛特,这是解决方案:D – deveLost

+0

哦,不:D确实是在顺序,但有一个问题,因为举例来说,当我这样做: for(int i = 0;我 deveLost

+0

在sortedArray中,你有**键**排序。也就是说,你应该这样做:'for(int i = 0 ; i stellz

3

您可以与工作:

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:publicTimeline]; 
[dict keysSortedByValueUsingComparator:^(id obj1, id obj2) { 
    return (NSComparisonResult)[obj1 compare:obj2]; 
}]; 

然后用dict而不是publicTimeline

希望这会有所帮助。

+0

Nop,它没有运行,它没有找到“keysSortedByValueUsingComparator”,我忘记了什么? – deveLost

+0

使用'NSMutableDictionary'而不是'NSDictionary' –

+0

好吧,我做了更新,我设置了你的代码,但我有一个错误 - [__ NSCFDictionary compare:]:无法识别的选择发送到实例0xbab33e0 – deveLost

2

字典没有订单。仅仅因为服务器以特定的顺序生成JSON并不意味着当您使用NSJSONSerialization进行反序列化时它可以被维护。

如果你需要维持秩序,或者:

A.获取所有键从字典和排序。然后,无论何时您需要按顺序访问(按索引),从数组中获取密钥并使用该密钥(不要迭代字典)。

B.使用不同的方法来反序列化JSON,它可以保存/提供有关事件处理顺序的数据(RestKit可以为您执行此操作)。

+0

我想使用一个数组来订购,但我失败:( – deveLost