我试图将托管对象的值保存在创建它的函数之外,以便我可以在其他地方使用它。 (例如,我保存了一个Manager实体,这样当我创建一个Employee实体时,我可以将它指向employeeManager关系中保存的Manager实体。)
我的班级大致如下:
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已正确分配给指向管理器。我已经尝试将管理器更改为var并且也完全跳过管理器并从NSManagedObject()直接分配给newManager但是每当我尝试将值分配给类变量时应用程序就会崩溃。
知道这可能是由于什么原因造成的吗?我不应该将这些事情分配给班级变量吗?
答案 0 :(得分:0)
分配这样的值就可以了。我怀疑问题是你声明newManager
是这样的:
var newManager = Manager()
使用Manager()
表示这会创建Manager
的新实例。但由于它是一个托管对象,因此无法正确初始化它。我猜测问题不会在以后为newManager
分配新值,而是必须处理旧的伪造版本。由于它已经无效,因此内存管理出了问题。
如果您想保留此引用,则应将newManager
声明为
var newManager : Manager?
这不会立即创建一个实例。它将表示newManager
现在是可选的,因此您必须进行其他代码更改才能处理。