【问题标题】:Swift - Model from Core Data release and exc bad accessSwift - Core Data 发布的模型和 exc 错误访问
【发布时间】:2015-07-08 15:06:12
【问题描述】:

我在这一行有 EXC_BAD_ACCESS:

self.accountControl.baseInfo = base

当我启用 NSZombies 时出现此错误:

-[CFString release]:消息发送到deallocated instance 0x1478cbc0

我发现我的问题出在这里:

override func viewDidLoad() {
    super.viewDidLoad()

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

StorageManager 中的方法getBaseInfo()

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 的屏幕:

我做错了什么?我该如何解决?谢谢

【问题讨论】:

    标签: ios swift memory automatic-ref-counting nszombie


    【解决方案1】:

    这真的很奇怪,但我通过重命名属性来解决这个问题。我的 BaseInfo 类有属性:

    var newTicket: String = ""
    

    BaseInfoCD 有:

     @NSManaged var newTicket: String? 
    

    并且出现了问题。我想这是因为它从新开始。当我将其重命名为 ticketNew 时,它工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 2015-04-11
      • 2016-07-19
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      相关资源
      最近更新 更多