Xcode 6有很多错误。但我不确定这是不是一个错误。可能不是因为这是我刚刚学习的东西。
我的问题是,每当我尝试实例化我的NSManagedObject的子类时,我都没有将entity: NSEntityDescription
和NSManagedContext: insertIntoManagedContext
参数传递给构造函数的选项,Xcode说" Extra论证'实体'在电话"
我从头开始创建一个新的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
}
感谢所有帮助。
答案 0 :(得分:6)
遇到同样的问题: 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)
}
到您的实体类,它将起作用。
答案 1 :(得分:1)
尝试不带感叹号的最后一行,如下所示:
var item = Item(entity: ent, insertIntoManagedObjectContext: context)
也许您还没有将您的应用名称添加到班级名称中:
Swift类是命名空间的 - 它们的作用域是编译它们的模块(通常是项目)。要将NSManagedObject类的Swift子类与Core Data模型一起使用,请在类字段的前面添加类名称前缀。具有模块名称的模型实体检查器。
答案 2 :(得分:0)
构造函数是否在Swift中继承?
我尝试使用NSEntityDescription.insertNewObjectForEntityForName:inManagedObjectContext