2016-06-02 19 views
5

Questo è il codice in cui sto facendo un errore di guida.Perché NSDictionary è nullo?

  for result in (result2){ 

      var dictData: NSDictionary? 

      dictData?.setValue(result.valueForKey("offer_title") as? String, forKey:"offer_title") 
       print(result.valueForKey("offer_title") as? String) 
      if result.valueForKey("discountPercentageOff") as? String != "" { 
       dictData?.setValue(result.valueForKey("discountPercentageOff") as? String, forKey:"discountPercentageOff") 
       print(result.valueForKey("discountPercentageOff") as? String) 
      } 

      dictData?.setValue(result.valueForKey("is_booked") as? Bool, forKey:"is_booked") 
      print(result.valueForKey("is_booked")) 
      dictData?.setValue(result.valueForKey("is_saved") as? Bool, forKey:"is_saved") 
      print(result.valueForKey("is_saved")) 

      dictData?.setValue(result.valueForKey("area_id") as? String, forKey:"area_id") 
      print(result.valueForKey("area_id")) 

      dictData?.setValue(result.valueForKey("area_name") as? String, forKey:"area_name") 

      dictData?.setValue(result.valueForKey("business_id") as? String, forKey:"business_id") 
      dictData?.setValue(result.valueForKey("business_name") as? String, forKey:"business_name") 
      dictData?.setValue(result.valueForKey("category_id") as? String, forKey:"category_id") 
      dictData?.setValue(result.valueForKey("category_name") as? String, forKey:"category_name") 
      dictData?.setValue(result.valueForKey("expiry_date") as? String, forKey:"expiry_date") 
      dictData?.setValue(result.valueForKey("featured") as? String, forKey:"featured") 
      dictData?.setValue(result.valueForKey("locality") as? String, forKey:"locality") 
      dictData?.setValue(result.valueForKey("offer_available") as? String, forKey:"offer_available") 
      dictData?.setValue(result.valueForKey("offer_id") as? String, forKey:"offer_id") 
      dictData?.setValue(result.valueForKey("offer_image") as? String, forKey:"offer_image") 
      dictData?.setValue(result.valueForKey("offer_nature") as? String, forKey:"offer_nature") 
      dictData?.setValue(result.valueForKey("offerNatureValue") as? String, forKey:"offerNatureValue") 
      dictData?.setValue(result.valueForKey("on_going") as? Bool, forKey:"on_going") 
      dictData?.setValue(result.valueForKey("discountOriginalPrice") as? String, forKey:"discountOriginalPrice") 
      dictData?.setValue(result.valueForKey("discountDiscountedPrice") as? String, forKey:"discountDiscountedPrice") 

      let offer = Offer() 
      offer.setDatafromServer(dictData!) 
      self.saveOfferData(item as! NSDictionary) 
      print("item:\(dictData)") 

      self._featuredOfferArray.addObject(offer) 
      self.feturedOfferTableView.reloadData() 



     } 

quando passo NSDictionary come param si dà errore pari a zero opzionale, e si può vedere ho creato NSDictionary ogni ciclo. ma è ancora zero. non capisco.

+1

È necessario dichiarare un NSMutableDictionary non un NSDictionary – iSashok

+1

'NSDictionary' non è modificabile. – Desdenova

+0

non ho ricevuto alcun risultato –

risposta

4
var dictData: NSDictionary? 

Modificare questa linea per

var dictData = NSMutableDictionary(); 
3

Non si inizializza mai il dizionario, var dictData: NSDictionary? definisce solo il tipo di variabile. Inoltre, se vuoi cambiare il dizionario, deve essere mutabile.

Inizia con:

var dictData: NSMutableDictionary? = NSMutableDictionary() 
0

La causa del disturbo è che il dizionario non è inizializzato a tutti.

C'è una sintassi molto più semplice con i tipi nativi Swift, qualsiasi tipo di casting non è in realtà necessario perché stai solo copiando gli articoli AnyObject. Se il valore è nil, la chiave non è impostata.

for result in result2 { 

    var dictData = [String:AnyObject]() 

    dictData["offer_title"] = result["offer_title"] 
    dictData["discountPercentageOff"] = result["discountPercentageOff"] 
... 

O anche copiare l'intero dizionario (a Swift nessun problema a causa di semantica di valore) e rimuovendo le chiavi inutilizzate è ancora più efficiente.