我正在使用核心数据来保存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'
如果我放置一个断点并打印数组,托管对象就在数组中。怎么了?
答案 0 :(得分:6)
专用初始化程序是
class func insertNewObjectForEntityForName(_ entityName: String!,
inManagedObjectContext context: NSManagedObjectContext!) -> AnyObject!
显然,您没有插入新对象,因此您确实需要一个可选值。也许您将类变量managedObject
声明为NSManagedObject!
?尝试将其设置为NSManagedObject?
,并将操作符更改为as?
。
答案 1 :(得分:1)
Core Data中的实体等同于一个类。您是否将实体添加到托管对象模型中,并将实体子类化? (查看programming guide以获得更全面的背景。)