接收EXC_BAD_ACCESS异常

时间:2017-06-13 12:20:39

标签: ios swift core-data

我正在使用单例类从CoreData中选择数据,并将其发送回调用的ViewController。我的问题是,当获取其中一个ManagedObject的属性时,应用程序崩溃并出现EXC_BAD_ACCESS异常。

这似乎只发生在iOS 9.x或模拟器上,但在这些上非常一致。它在运行10.x的设备上没有发生。我将方案诊断设置为显示僵尸对象,现在出现以下错误:

-[CFString copy]: message sent to deallocated instance 0x15b92990

问题是被引用的字符串是在我收到此错误之前直接检索到的对象上,并且我正在使用Swift(因此不能手动解除分配任何内容),所以我不明白为什么它被解除分配。 / p>

选择对象的代码如下所示:

func getModelTypePrice(mmCode: String, year: Int) -> ModelTypePrice? {
    let request = NSFetchRequest<ModelTypePrice>(entityName: "ModelTypePrice")
    request.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [NSPredicate(format: "mmcode = %@", mmCode),
                                                                        NSPredicate(format: "reg_year = %d", year)])
    do {
        let prices = try managedContext.fetch(request)
        if prices.count == 1 {
            return prices[0]
        }
    } catch {
        print("Error selecting object: \(error)")
    }
    return nil
}

从ViewController调用,并按如下方式使用:

if let price = LibraryAPI.sharedInstance.getModelTypePrice(mmCode: "123", year: 2017) {
    self.newPrice = price.new_price // Error happens here.
}

ViewController有一个名为newPrice的可选String属性。 ModelTypePrice上的new_price属性也是可选的String。 我在这里有点亏,所以任何意见或建议都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

修正了它:[CFNumber release]: message sent to deallocated instance

问题是以new开头的托管对象的属性名称(new_price)。将其更改为price_new修复它。显然他们改变了iOS 10.x的处理方式,因为它从来都不是问题。

也许这会让别人感到沮丧。