bog*_*gen 30 core-data nsmanagedobject ios swift
class Alternative: NSManagedObject {
@NSManaged var text: String
@NSManaged var isCorrect: Bool
@NSManaged var image: NSData
}
convenience init(text: String, isCorrect: Bool, entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext!) {
let alternative = Alternative(entity: entity, insertIntoManagedObjectContext: context) as Alternative
alternative.text = text
alternative.isCorrect = isCorrect
return alternative
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个方法,让我用这个调用初始化新对象:
let newAlternative = Alternative("third platform", True, entityDescription, managedObjectContext)
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
Convenience initializer for Alternative must delegate with self.init
Run Code Online (Sandbox Code Playgroud)
我需要更改我的initalizer以使我的示例使用工作?
Mar*_*n R 36
便捷初始化程序必须调用指定的初始化程序self:
convenience init(text: String, isCorrect: Bool, entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext!) {
self.init(entity: entity, insertIntoManagedObjectContext: context)
self.text = text
self.isCorrect = isCorrect
}
Run Code Online (Sandbox Code Playgroud)
这将被称为
let newAlternative = Alternative(text: "third platform", isCorrect: true,
entity: entityDescription, insertIntoManagedObjectContext: managedObjectContext)
Run Code Online (Sandbox Code Playgroud)
此外,您还可以将实体描述的创建移动到便利初始化器中,而不是将其作为参数传递(由Mundi的答案推动):
convenience init(text: String, isCorrect: Bool, insertIntoManagedObjectContext context: NSManagedObjectContext!) {
let entity = NSEntityDescription.entityForName("Alternative", inManagedObjectContext: context)!
self.init(entity: entity, insertIntoManagedObjectContext: context)
self.text = text
self.isCorrect = isCorrect
}
Run Code Online (Sandbox Code Playgroud)
Mun*_*ndi 10
我只是用类函数做了这个:
class func newInstance(text: String, notes:String,
context: NSManagedObjectContext) -> Item {
var item = NSEntityDescription.insertNewObjectForEntityForName("Item",
inManagedObjectContext: context) as Item
item.notes = notes
item.text = text
return item
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样打电话(几乎一样漂亮):
let item = Item.newInstance(text, notes:notes, context:context)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18056 次 |
| 最近记录: |