我正在使用核心数据在 vc1 中保存一个类别,并想将列表属性添加到 vc2 中的列表中。我的数据模型是许多列表属性的一个类别。
我在 vc1 中添加这样的类别:
func createNewCategory() {
var category: NSManagedObject! = NSEntityDescription.insertNewObjectForEntityForName("Category", inManagedObjectContext: self.context) as NSManagedObject
category.setValue(self.categoryTextField.text, forKey: "name")
var error: NSError? = nil
self.context.save(&error)
}
在vc2中设置数据:
func setupCoreData() {
var appDelegate: AppDelegate = (UIApplication.sharedApplication()).delegate as AppDelegate
self.context = appDelegate.managedObjectContext!
var request: NSFetchRequest = NSFetchRequest(entityName: "Category")
if (self.context.executeFetchRequest(request, error: nil)) {
var error: NSError? = nil
self.listData = self.context.executeFetchRequest(request, error: &error)
self.managedObject = self.listData.objectAtIndex(0) as NSManagedObject
}
}
它在最后一行崩溃:self.managedObject = ...
说:
CoreData: error: Failed to call designated initializer on NSManagedObject class 'NSManagedObject'
如果我放置一个断点并打印数组,托管对象就在数组中。怎么了?
最佳答案
专用初始化器是
class func insertNewObjectForEntityForName(_ entityName: String!,
inManagedObjectContext context: NSManagedObjectContext!) -> AnyObject!
显然,您没有插入新对象,因此您确实需要一个可选值。也许您将类变量 managedObject
声明为 NSManagedObject!
?尝试将其设置为 NSManagedObject?
并将运算符更改为 as?
。
关于ios - swift 核心数据 : error: Failed to call designated initializer on NSManagedObject class 'NSManagedObject' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25504799/