2016-10-27 4 views
0

Ich versuche, eine einzelne Entität aus einem Array von NSManagedObjects var journals = [NSManagedObject]() zu nehmen und auf einer Detailseite anzuzeigen. Ich mache zur Zeit, dass durch eine Variable auf den Ziel-Controller deklarieren, wenn ein Übergang von einer didSelectRow Aktion vorbereitet:Wert des Typs NSManagedObject kann nicht dem Typ 'Journal' (eine Entität) zugewiesen werden

let indexPath = tableView.indexPath(for: (sender as! UITableViewCell)) 
controller.journalToDisplay = journals[indexPath!.row] 

Im Display-Controller Ich habe nicht viel noch eingerichtet, gerade diese delaration:

var journalToDisplay: Journal? 

die werfen den Fehler:

Cannot assign value of type 'NSManagedObject' to type 'Journal?' 

Ist das nicht nur ein Journal NSManagedObject ohnehin in diesem Fall? Ich versuchte mit etwas wie:

var journalToDisplay: NSManagedObject as! Journal 

Aber das scheint nicht der richtige Weg zu sein.

+1

Welches ist die Zeile, die den Fehler verursacht? Wo deklarieren Sie journalToDisplay oder instanziieren Sie es? Wenn es sich um die Instanziierung handelt, müssen Sie die Journale [indexPath! .row] nur explizit als Journal-Objekt darstellen. Meine Vermutung ist, dass es sich nur um ein Array handelt, und xcode kann nicht garantieren, dass der Objekttyp von einem Index-Accessor aus einem Array kommt, da Sie in Swift Objekte verschiedener Typen in demselben Array speichern können. –

+1

Ist 'Journal' eine Unterklasse von' NSManagedObject'? –

+0

Sie nehmen die Hilfe von diesem Link http://stackoverflow.com/questions/2604940/what-is-the-entity-for-my-nsmanagedobject –

Antwort

1

Arrays die Typen der Objekte in ihnen enthaltenen nicht implizit wissen, so kann der Compiler benutzerdefinierte Klassen nicht ohne explizit das Objekt, das Sie Suche von Casting zuweisen das Array indizieren.

Übergeben Sie Journale [indexPath! .row] an ein Journal-Objekt, sodass der Compiler weiß, dass es so behandelt wird.

0

Fixiert gemäß @JakeT. ‚S Anweisungen explizit niedergeschlagenen journals[indexPath!.row] zu einem Objekt Journal,

controller.journalToDisplay = journals[indexPath!.row] as! Journal 
Verwandte Themen