2016-06-06 13 views
0

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


    } 
+0

Das sieht wie ein Job für structs. – Alexander

+0

das ist etwas, das in PHP leicht ist ... anArray [anIndex] = aValue; anIndex ++; – user3033437

Antwort

1

nur bewegen Sie Ihren var jsonValues = NSMutableDictionary() innerhalb Zyklus

+0

Sie hatten Recht. Es war doch nicht so kompliziert, aber ohne deine Hilfe wäre ich dazu nicht gekommen, danke! – user3033437

0

Sie erstellen ein NSMutableDictionary und fügen es wiederholt ein. Das Objekt wird eingefügt, nicht sein Inhalt. Daher enthält jeder Eintrag das gleiche Objekt. Sie müssen an jedem Index ein neues Objekt einfügen.

Verwandte Themen