はじめに
ゆう@あんのうんです。
最近もっぱらswiftばっか開発していて、Objective-Cに戻れません。。。
今日は珍しくCoreDataの話題。
タイトル通りのエラーに悩まされており、解決したので投稿
現象
例えば、以下のCoreDataのエンティティがあるとして
これの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 省略
なるエラーが発生。
解決方法
上記の用にHogeエンティティに対応するClassをインスペクタ内で指定してあげれば問題なく動作しました。