我正在使用核心数据在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 = ...说:
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?。
managedObject
NSManagedObject!
NSManagedObject?
as?