Swift — модель из выпуска Core Data и исключающий плохой доступ

У меня есть EXC_BAD_ACCESS в этой строке:

self.accountControl.baseInfo = base

Когда я включил NSZombies, я получаю эту ошибку:

-[Выпуск CFString]: сообщение отправлено на освобожденный экземпляр 0x1478cbc0

Я узнал, что моя проблема здесь:

override func viewDidLoad() {
    super.viewDidLoad()

    if baseInfo == nil {
        baseInfo = StorageManager.sharedInstance.getBaseInfo()
        reloadBaseInfo(false)
    }

Способ getBaseInfo() в StorageManager:

func getBaseInfo() -> BaseInfo? {
    if let baseInfoCD = getBaseInfoCD() {
        var baseInfo = BaseInfo()
        baseInfo.update(baseInfoCD)
        return baseInfo
    }
    return nil
}

func getBaseInfoCD() -> BaseInfoCD? {
    let fetchRequest = NSFetchRequest(entityName: "BaseInfoCD")

    var error: NSError?
    if let fetchResults = managedObjectContext.executeFetchRequest(fetchRequest, error: &error) as? [BaseInfoCD] {
        if fetchResults.count > 0 {
            return fetchResults.last!
        }
    }
    return nil
}

Я думаю, что проблема связана с Core Data, и он освобождает объект, но я не знаю, что я делаю неправильно. Вот скрин из Zombie Instruments: Скриншот инструментов

Что я делаю неправильно? Как я могу это исправить? Спасибо


person Libor Zapletal    schedule 08.07.2015    source источник


Ответы (1)


Это действительно странно, но я исправляю это, переименовывая свойство. Мой класс BaseInfo имеет свойство:

var newTicket: String = ""

и BaseInfoCD имеет:

 @NSManaged var newTicket: String? 

и возникла проблема. Я думаю, это потому, что он начинается с нового. Когда я переименовываю его в ticketNew, он работает нормально.

person Libor Zapletal    schedule 16.07.2015