无法实例化 NSManagedObject 的子类
Posted
技术标签:
【中文标题】无法实例化 NSManagedObject 的子类【英文标题】:Can't instantiate subclass of NSManagedObject 【发布时间】:2014-10-28 01:36:04 【问题描述】:Xcode 6 存在大量错误。但我不太确定这是否是一个错误。可能不是,因为这是我刚刚学习的东西。
我的问题是,每当我尝试实例化我的 NSManagedObject 的子类时,我都无法将 entity: NSEntityDescription
和 NSManagedContext: insertIntoManagedContext
参数传递给构造函数,Xcode 说“调用中的额外参数'实体'”
我从头开始创建了一个新的 Xcode 项目,只是想看看我是否可以在一个更小、最小的项目中重新创建问题。
ToDoList.Item 在数据模型检查器中设置为Item
实体类。
代码如下:
override func viewDidLoad()
super.viewDidLoad()
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext!
let ent = NSEntityDescription.entityForName("Item", inManagedObjectContext: context)!
//compiler complains here
var item = Item(entity: ent, insertIntoManagedObjectContext: context)!
这是子类:
import UIKit
import CoreData
class Item: NSManagedObject
@NSManaged var title: String
@NSManaged var completed: Bool
感谢所有帮助。
【问题讨论】:
【参考方案1】:刚遇到同样的问题:Init method for core data entity not available
显然我们必须实现
init(entity: NSEntityDescription, insertIntoManagedObjectContext context, NSManagedObjectContext?)
我们自定义的 NSManagedObject 类中的方法。所以只需添加
override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?)
super.init(entity: entity, insertIntoManagedObjectContext: context)
到你的实体类,它会工作。
【讨论】:
这在 SDK 的最新版本中必须是必需的。我在 youtube 上看到 M2KDev 没有它就可以做到这一点。【参考方案2】:试试不带感叹号的最后一行,像这样:
var item = Item(entity: ent, insertIntoManagedObjectContext: context)
也许你还没有将你的应用名称添加到类名中:
Swift 类是命名空间的——它们的作用域是编译它们的模块(通常是项目)。要将 NSManagedObject 类的 Swift 子类与您的 Core Data 模型一起使用,请在具有模块名称的模型实体检查器。
https://developer.apple.com/library/mac/documentation/Swift/Conceptual/BuildingCocoaApps/WritingSwiftClassesWithObjective-CBehavior.html
【讨论】:
我确实在上面说过...“ToDoList.Item 在数据模型检查器中设置为项目实体类。” ToDoList 是项目名称。删除感叹号会引发错误。不过,感谢您的意见【参考方案3】:构造函数在 Swift 中是继承的吗?
我会尝试使用NSEntityDescription.insertNewObjectForEntityForName:inManagedObjectContext
【讨论】:
看起来这需要我解决。但我已经看到它是通过子类完成的。以上是关于无法实例化 NSManagedObject 的子类的主要内容,如果未能解决你的问题,请参考以下文章
NSLog'd 时子类化的 NSManagedObject 不调用描述