Core data 分配给类变量时核心数据崩溃
我试图将托管对象的值保存在创建它的函数之外,以便在其他地方使用它。(例如,我正在保存经理实体,以便在创建员工实体时,可以将其指向employeeManager关系中保存的经理实体。) 我的班级大致如下:Core data 分配给类变量时核心数据崩溃,core-data,Core Data,我试图将托管对象的值保存在创建它的函数之外,以便在其他地方使用它。(例如,我正在保存经理实体,以便在创建员工实体时,可以将其指向employeeManager关系中保存的经理实体。) 我的班级大致如下: class Company { var newManager = Manager() func addEmployee() { let appDelegate = UIApplication.sharedApplication().delegate as! AppDeleg
class Company {
var newManager = Manager()
func addEmployee() {
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext!
let entity = NSEntityDescription.entityForName("Manager", inManagedObjectContext: managedContext)
let manager = NSManagedObject(entity: entity!, insertIntoManagedObjectContext:managedContext) as! Manager
manager.name = name
newManager = manager // Crashes here EXC_BAD_ACCESS (code=1, address=0x38)
}
}
使用调试器,我可以看到变量newManager被正确地分配给point to manager。我尝试将manager更改为var,也跳过了manager,并直接从NSManagedObject()将其赋值给newManager,但每当我尝试将值赋值给类变量时,应用程序就会崩溃
你知道这是什么原因吗?我不应该把这些东西分配给类级变量吗?这样分配一个值是可以的。我怀疑问题在于您这样声明了
newManager
:
var newManager = Manager()
使用Manager()
意味着这将创建Manager
的新实例。但由于它是托管对象,因此无法正确初始化它。我猜问题不在于稍后为newManager
分配新值,而是必须处理旧的、伪造的版本。由于它已经无效,内存管理出现问题
如果要保留此引用,应将newManager
声明为
var newManager : Manager?
这不会立即创建实例。这意味着newManager
现在是可选的,因此您必须进行其他代码更改来处理该问题