2016-10-27 14 views
0

NSManagedObjectsの配列var journals = [NSManagedObject]()から単一のエンティティを取得し、詳細ページに表示しようとしています。NSManagedObject型の値を 'Journal'(エンティティ)型に割り当てることができません

:私は非常にまだ設定されていないディスプレイコントローラ、ちょうどこのdelarationで

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

:私は現在、ということをセグエがdidSelectRowアクションから調製されたときに移動先のコントローラ上の変数を宣言することによって行います

var journalToDisplay: Journal? 

エラーがスローされます。

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

は、この場合には、とにかくジャーナルだけNSManagedObjectではないですか?私は次のようなものを使ってみました:

var journalToDisplay: NSManagedObject as! Journal 

しかし、それは正しい方法ではないようです。

+1

エラーを投げるラインはどれですか? journalToDisplayを宣言するか、それをインスタンス化する場所?インスタンス化の場合は、ジャーナル[indexPath!.row]をジャーナルオブジェクトとして明示的にキャストするだけでよいと思います。私は、それが単なる配列であり、xcodeは、インデックス型アクセサから配列から出てくるオブジェクト型を保証することはできません。別の型のオブジェクトをSwiftの同じ配列に格納できるからです。 –

+1

'Journal'は' NSManagedObject'のサブクラスですか? –

+0

あなたはこのリンクからの助けを借ります。http://stackoverflow.com/questions/2604940/what-is-the-entity-for-my-nsmanagedobject –

答えて

1

配列は、暗黙のうちにそれらに含まれるオブジェクトの種類が分からないので、コンパイラは明示的にあなたから取得したオブジェクトをキャストすることなく、カスタムクラスを割り当てることはできません配列を索引付けする。

ジャーナルオブジェクトにジャーナル[indexPath!.row]をキャストして、コンパイラがそれをそのように扱うことを知っているようにします。

0

@ JakeTごとに固定されています。ジャーナルオブジェクトへjournals[indexPath!.row]に明示的にダウンキャストの命令は、

controller.journalToDisplay = journals[indexPath!.row] as! Journal 
関連する問題