2016-10-31 4 views
0
if let context = delegate?.managedObjectContext { 


     do { 

     let fetchRequest = NSFetchRequest<Message>(entityName: "Message") 

      let messages = try(context.fetch(fetchRequest) as? [Message]) 

Das gibt mir den Fehler "bedingte Besetzung von [Nachricht] bis [Nachricht] gelingt es immer wieder"bedingte Besetzung von [Nachricht] bis [Nachricht] gelingt es immer wieder

  for message in messages! { 
       context.delete(message) 

      } 
      try(context.save()) 

     } catch let err { 
      print (err) 
     } 

Kann mir jemand helfen zu verstehen, was ich falsch mache?

+1

entfernen Sie die 'wie? [Message] 'Teil, da dies in diesem Kontext nicht zwingend erforderlich ist, da der zurückgegebene Wert bereits als' [Message] 'gecastet wurde und keine explizite Umwandlung von Ihnen erforderlich ist. – holex

Antwort

3

Vor Swift 3, context.fetch() nur eine [AnyObject] zurückgegeben. Deshalb musstest du es so werfen.

Aber jetzt in Swift 3 wird die Klasse NSFetchRequest generisch und context.fetch() wird ein Array des generischen Typs zurückgeben, den Sie beim Erstellen der Abrufanforderung angegeben haben. Es ist jetzt viel sicherer.

Daher müssen Sie es nicht auf den gewünschten Typ konvertieren, weil es bereits ist dieser Typ!

let messages = try context.fetch(fetchRequest) 
Verwandte Themen