2016-11-30 1 views
1

Le deuxième objet de quickFilterDictionary dans self.preferencesListFilterDictionary est nil. Comment ajouter [NSIndexPath] chemin d'index (comme clé) et NSNumber (comme valeur) dans Dictionary?Problèmes lors de l'ajout de NSIndexPath comme clé et NSNumber comme valeur dans le dictionnaire?

Remarque: premier objet est ajouté avec succès, seul le 2e but est nil quand j'imprimé self.preferencesListFilterDictionary dans la console. Puis-je savoir, qu'est-ce que je fais mal en dessous du 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) 

impression console:

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

Pour obtenir plus haut dictionnaire bool du numéro, je l'ai écrit le code suivant -

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 
    } 

Répondre

0

Je pense que vous êtes confus sur la différence entre une ligne, un chemin d'index et un index.

Dans le code suivant:

let row = self.quickFilterArr.indexOf(obj) 

Si vous cliquez sur l'option ligne, vous verrez qu'il est un objet de type Array.Index?. Ce n'est pas une rangée.

Y a-t-il également une raison pour laquelle vous utilisez NSNumber, NSIndexPath et une valeur de mise à jour pour la clé? Contrairement au nombre, indexPath et juste mettre à jour vos valeurs du dictionnaire avec: preferencesListFilterDictionary [ "quickFilterDictionaryKey] = quickFilterDictionary

Si vous l'option cliquez sur quickFilterArr et il est un tableau de IndexPaths [indexPath] - Pour référencer le indexPath à votre choix index dans ce tableau vous suffit de faire:

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

Salut @Kayla Galway, vous avez manqué cette déclaration - self.quickFilterArr = [localizedStrOf ("deliveryNowOnly"), localizedStrOf ("nominale")] – Lion