2014-02-20 46 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