Ich google seit einiger Zeit, versuche eine Lösung für mein Problem zu finden und endete hier. Ich versuche, ein Wörterbuch von Wörterbüchern zu erstellen, um alle Daten in TableViewCells zu laden. Also brauche ich einen Schlüssel für "Name", einen anderen Schlüssel für "Beschreibung", einen anderen Schlüssel für "Bildname" und so.NSMutableDictionary repliziert den zuletzt eingefügten Index in jedem eingefügten Index anstelle des neuen Index
Ich mache einen asynchronen Aufruf, also habe ich eine globale Var erstellt, nsDict
das ist eine NSMutableDictionary
und in der asynchronen parseJson
Funktion habe ich eine andere NSMutableDictionary
namens jsonValues erstellt. Ich verwende jsonValues, um die Daten innerhalb der Schleife zu speichern. Die Daten werden auch mit Schlüsseln gespeichert:
jsonValues["name"] = Name
Und am Ende der Schleife I speichern jsonValues innerhalb nsDict, meine NSMutableDictionary globale Variable.
An diesem Punkt gibt es bereits jemanden, der sicher mein Problem und meinen Fehler kennt. Aber ich habe viel Stack-Overflow probiert und gelesen und nicht den Weg gefunden, etwas so einfach zu machen.
Mein Wörterbuch wird von allen JsonValues gefüllt, aber anstatt verschiedene Werte einzufügen, kopiert es alle. Dies ist, in der ersten Runde der Schleife, den ersten Wert (Wörterbuch der Werte) einfügen. In der zweiten Schleife, fügen Sie das zweite Wörterbuch der Werte im ersten und im zweiten Index ... Am Ende habe ich 43 gleiche Wörterbücher. Alle von ihnen sind die Kopie des letzten ...
Weiß jemand warum? Ich habe zwei Stunden mit diesem Problem verbracht. Einige Hilfe wäre sehr dankbar, danke!
private func parseJson(json : NSMutableArray, tableView : UITableView){
var jsonValues = NSMutableDictionary()
nsDict.removeAllObjects()
nsDict = NSMutableDictionary.init(capacity: 10)
var c : Int = 0
for j in json {
var nsData : NSMutableDictionary
//clean array
// jsonValues.removeAll()
//Create main value
guard let value = j.valueForKey("value")?.valueForKey("value")! else{
return
}
//Get name
guard let Name : String = (value.valueForKey("Name")?.valueForKey("en") as? String) else {
return
}
jsonValues["name"] = Name
title = "Address: "
//Get Address
if let Address = value.valueForKey("Address")?.valueForKey("en") as? String{
jsonValues["Address"] = Address
}
title = "Country: "
//Get country
if let country = geoposition.valueForKey("country") as? String{
let fCountry = title+country
jsonValues["Country"] = fCountry
}else{}
nsDict.setObject(jsonValues, forKey: c)
c += 1
}
doTableRefresh(tableView);
}
Das sieht wie ein Job für structs. – Alexander
das ist etwas, das in PHP leicht ist ... anArray [anIndex] = aValue; anIndex ++; – user3033437