2015-05-15 5 views
0

Я пытаюсь сохранить значение управляемого объекта вне функции, которая его создает, поэтому я могу использовать его в другом месте. (Например, я экономлю на объект менеджера, так что, когда я создаю объект Employee, я могу указать его к сохраненному сущности менеджера в отношениях employeeManager.)Сбой основных данных при назначении переменной класса

Мой класс примерно так:

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, а также пропустил менеджер в целом и назначил непосредственно newManager из NSManagedObject(), но приложение сработает всякий раз, когда я пытаюсь присвоить значение переменной класса.

Любая идея, от чего это может быть связано? Должен ли я присваивать такие вещи переменным уровня класса?

ответ

0

Назначение такого значения в порядке. Я подозреваю, что проблема в том, что вы объявили newManager так:

var newManager = Manager() 

Использование Manager() означает, что это создает новый экземпляр Manager. Но поскольку это управляемый объект, он не инициализирует его правильно. Я предполагаю, что проблема заключается не в присвоении нового значения newManager, а в том, что старая, фиктивная версия должна быть удалена. Поскольку это уже недействительно, в управлении памятью все происходит неправильно.

Если вы хотите сохранить эту ссылку, вы должны объявить newManager, как

var newManager : Manager? 

Это не будет немедленно создать экземпляр. Он будет означает, что newManager теперь является необязательным, поэтому вам придется выполнять другие изменения кода, чтобы справиться с этим.

+0

Спасибо, что было! – hitlad

Смежные вопросы