分配给类变量

时间:2015-05-15 18:03:37

标签: core-data

我试图将托管对象的值保存在创建它的函数之外,以便我可以在其他地方使用它。 (例如,我保存了一个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但是每当我尝试将值分配给类变量时应用程序就会崩溃。

知道这可能是由于什么原因造成的吗?我不应该将这些事情分配给班级变量吗?

1 个答案:

答案 0 :(得分:0)

分配这样的值就可以了。我怀疑问题是你声明newManager是这样的:

var newManager = Manager()

使用Manager()表示这会创建Manager的新实例。但由于它是一个托管对象,因此无法正确初始化它。我猜测问题不会在以后为newManager分配新值,而是必须处理旧的伪造版本。由于它已经无效,因此内存管理出了问题。

如果您想保留此引用,则应将newManager声明为

var newManager : Manager?

这不会立即创建一个实例。它表示newManager现在是可选的,因此您必须进行其他代码更改才能处理。