2016-11-30 1 views
1

zweite Aufgabe quickFilterDictionary in self.preferencesListFilterDictionary ist nil. Wie fügt man [NSIndexPath] Indexpfad (als Schlüssel) und NSNumber (als Wert) in Dictionary hinzu?Probleme beim Hinzufügen von NSIndexPath als Schlüssel und NSNumber als Wert im Wörterbuch?

Hinweis: Das erste Objekt wurde erfolgreich hinzugefügt, nur das zweite Objekt ist nil, wenn ich self.preferencesListFilterDictionary in der Konsole ausgedruckt habe. Darf ich wissen, was mache ich falsch unter dem Code?

self.preferencesListFilterDictionary["price"] = 1000 
self.quickFilterArr = [localizedStrOf("deliveryNowOnly"),localizedStrOf("rated")] 
var quickFilterDictionary = Dictionary<NSIndexPath, NSNumber?>() 
     for obj in self.quickFilterArr { 
      let row = self.quickFilterArr.indexOf(obj) 
      let indexPath = NSIndexPath(forRow:row!, inSection: 0) 
      quickFilterDictionary[indexPath] = NSNumber(bool: false) 
     } 
     print(quickFilterArr.count) 
     print(quickFilterDictionary) 
self.preferencesListFilterDictionary.updateValue(quickFilterDictionary as? AnyObject, forKey: "quickFilterDictionaryKey") 
print(self.preferencesListFilterDictionary) 

Konsole Druck:

▿ [1] : 2 elements 
    - .0 : "quickFilterDictionaryKey" 
    - .1 : nil 

Um oben Wörterbuch Bool von Nummer zu bekommen, schrieb ich folgenden Code -

func getQuickFilterValueOfIndexpath(indexPath:NSIndexPath) -> Bool { 
     if let val = self.preferencesListFilterDictionary["quickFilterDictionaryKey"] { 
      // now val is not nil and the Optional has been unwrapped, so use it 
      let tempDict = val as! Dictionary<NSIndexPath, NSNumber?> 
      if let boolVal = tempDict[indexPath] { 
       return boolVal! 
      } 
     } 

     return false 
    } 

Antwort

0

Ich glaube, Sie auf den Unterschied verwirrt sind zwischen eine Zeile, ein IndexPath und ein Index.

Im folgenden Code:

let row = self.quickFilterArr.indexOf(obj) 

Wenn Sie die Option, klicken Sie auf Zeile, werden Sie sehen, dass es ein Objekt vom Typ ist Array.Index?. Es ist keine Zeile.

Auch gibt es einen Grund, warum Sie NSNumber, NSIndexPath und Aktualisierungswert für Schlüssel verwenden? Im Gegensatz zu Anzahl, IndexPath und nur mit Ihrem Wörterbuch Werte Aktualisierung: preferencesListFilterDictionary [ "quickFilterDictionaryKey] = quickFilterDictionary

Wenn Sie die Option, klicken Sie auf quickFilterArr und es eine Reihe von IndexPaths ist [IndexPath] - die IndexPath am gewünschten referenzieren Index in diesem Array würden Sie gerade tun:

if let arrayIndex = quickFilterArr.indexOf(obj) { 
//if your array is an array of Index Paths 
//you would then pull the IndexPath object at the index you have defined above 
    let indexPath = quickFilterArr[arrayIndex] 
    quickFilterDictionary[indexPath] = Number(bool: false) 
} 
+0

Hallo @Kayla Galway, Sie diese Aussage verfehlt - self.quickFilterArr = [localizedStrOf ("deliveryNowOnly"), localizedStrOf ("Rating")] – Lion

Verwandte Themen