2011-01-03 6 views
0

Um Daten an meinen Webservice zu übergeben, erstelle ich ein NSDictionary mit den Objekten und Schlüsseln, die ich brauche, und verwende JSONRepresentation, um es schön zu formatieren, damit ich es zu meinem Dienst posten kann.Erstellen einer JSONRepräsentation von meinem NSDictionary vermasselt die Reihenfolge?

Es hat alles mit der vorherigen Version, wo nur 2 Parameter benötigt wurden, gut funktioniert. Ein Array mit Listenelementen und einer UDID.

Nein, ich muss auch eine Versionsnummer übergeben, weil wir mehr Daten für Menschen mit der Anwendung in dieser neuen Version bereitstellen müssen.

Nur Problem ist, wenn ich meine JSONRepresentation jetzt erstellen, sind die Reihenfolge der Dinge alle durcheinander.

NSMutableDictionary *rowDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:arrayDict,@"basketListV2",sharedData.udid,@"UDID",@"1.4",@"version",nil]; 

Es druckt Version zuerst, dann UDID und dann basketListV2.

Wer weiß, was ich tun kann, um die Reihenfolge meiner NSDict aufrechtzuerhalten? Ich probierte sowohl NSDictionary und NSMutableDictionary (Wahrscheinlich muss nichts damit zu tun, aber zu Testzwecken musste ich es versuchen.)

Vielen Dank im Voraus.

Lewion

+0

Sie nicht auf Bestellung verlassen sollten. RFC 4627 besagt explizit, dass ein Objekt eine _unordered_-Auflistung von null oder mehr Name/Wert-Paaren ist. –

Antwort

1

Die Reihenfolge eines NSDictionary ist nicht definiert, es sei denn die Schlüssel sind Strings (siehe http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/Reference/Reference.html)

Wie dem auch sei, die Bestellung nicht viel sens für ein Wörterbuch machen. Sie sollten also nicht einmal auf der JSON-Darstellungsebene damit beschäftigt sein.

Wenn Sie diese Dinge wirklich bestellen müssen (und sicherstellen, dass sie über die Versionsänderung hinweg geordnet bleiben), verwenden Sie NSArrays, die nach Schnittstelle sortierte Sammlungen von Objekten sind. (Siehe http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html)

Cheers,

-stan