Project Unknown's Blog

Peojct.Unknownと言う名前で細々とアプリ開発をやってるメンバーのブログです。

CoreDataでエンティティの新規レコードを生成し、NSManagedObjectのサブクラスにキャストしたら「Could not cast value of type 'NSManagedObject_' to」のエラー

ゆう@あんのうんです。

最近もっぱらswiftばっか開発していて、Objective-Cに戻れません。。。

今日は珍しくCoreDataの話題。

タイトル通りのエラーに悩まされており、解決したので投稿

現象

例えば、以下のCoreDataのエンティティがあるとして

03.png

これのNSManagedObjectのサブクラスとして以下で用意していました(言語はSwift2.0です)

import Foundation
import CoreData

@objc(Hoge)
public class Hoge: NSManagedObject {
    
    @NSManaged public var name:         String?
    @NSManaged public var id:           Int16
    @NSManaged public var updatedate:   NSDate
        
}

んで、以下の通りにNSManagedObjectを生成しました。

import Foundation
import CoreData

public class CoreData {
    
    private static let instance = CoreData()
    
    public class var sharedCoreData: CoreData {
        return instance
    }
    
    // 省略
    
    public func newRecordWithName(name: String, inContext context: NSManagedObjectContext) -> NSManagedObject {
        return NSEntityDescription.insertNewObjectForEntityForName(name, inManagedObjectContext: context)
    }
}

class func newHogeManagedObjectContext(context: NSManagedObjectContext) -> Hoge {
        return CoreData.sharedCoreData.newRecordWithName(NSStringFromClass(CategoryInfo), inContext: context) as! Hoge
    }

そしたら、タイトル通り、

Could not cast value of type 'NSManagedObject_Hoge_' to 省略

なるエラーが発生。

解決方法

04.png

上記の用にHogeエンティティに対応するClassをインスペクタ内で指定してあげれば問題なく動作しました。