2014-10-21 16 views
8

Ho riscontrato un problema con l'esecuzione di un NSDictionary per ottenere un oggetto nel mio modello CoreData.Impossibile convertire il tipo dell'espressione 'NSDictionary' per digitare 'StringLiteralConvertible'

let moc:NSManagedObjectContext = SwiftCoreDataHelper.managedObjectContext() 
    let results:NSArray = SwiftCoreDataHelper.fetchEntities(NSStringFromClass(Notificatie), withPredicate: nil, managedObjectContext: moc) 

    for notificatie in results 
    { 
     let singleNotificatie:Notificatie = notificatie as Notificatie 

     let notDict:NSDictionary = ["title":notificatie.title, "fireDate":notificatie.fireDate] 

    } 

Cannot convert the expression's type 'NSDictionary' to type 'StringLiteralConvertible'

Il problema è presente nel dizionario.

Perché non posso eseguire il cast di una stringa per ottenere l'oggetto? Qualche soluzione?

risposta

8

Suppongo che le title e fireDate siano proprietà facoltative, se sì, questo è il motivo. A NSDictionary non è possibile memorizzare i valori nil.

Si debbono: solo

  • memorizzare valori non-nil (fino a voi come, utilizzando opzionale vincolante, in modo esplicito da scartare)
  • utilizzare un dizionario veloce

Se questo è il modo la classe Notificatie assomiglia:

class Notificatie { 
    var title: String? 
    var fireDate: NSDate? 
} 

utilizzando l'opzione di prima si dovrebbe aggiungere al dizionario solo valori non-nil:

let notDict:NSDictionary = NSDictionary() 

if let title = notificatie.title { 
    notDict.setValue(title, forKey: "title") 
} 

if let fireDate = notificatie.fireDate { 
    notDict.setValue(fireDate, forKey: "fireDate") 
} 

Se invece si opta per il dizionario veloce:

let notDict: [String:AnyObject?] = ["title":notificatie.title, "fireDate": notificatie.fireDate] 
+0

Hmmm ... Non sei sicuro di quello che vuoi dire con proprietà facoltative. Come potrei cambiarlo? – SwingerDinger

+0

Vedi risposta aggiornata – Antonio

+0

Grazie amico! Lo capisco ora :) – SwingerDinger

Problemi correlati