尝试更改 Bool 属性时出现 EXC_BAD_ACCESS 错误

Posted

技术标签:

【中文标题】尝试更改 Bool 属性时出现 EXC_BAD_ACCESS 错误【英文标题】:EXC_BAD_ACCESS error when trying to change Bool property 【发布时间】:2014-06-09 00:28:20 【问题描述】:

我正在尝试更改 Bool 属性并收到 EXC_BAD_ACCESS 错误。

我正在使用 XCode 6 和 Swift。

note 属性保存得很好,但completed 属性抛出了EXC_BAD_ACCESS 错误

import Foundation
import CoreData

class Task: NSManagedObject


    @NSManaged var note: String!
    @NSManaged var completed: Bool


更改属性例程

    // taskObject is an instance of Task()

    // Set the completed flag
    taskObject.completed = true // EXC_BAD_ACCESS

【问题讨论】:

我会尝试使用NSNumber(bool:true) 而不是true。 CoreData 基于没有 bool 类型的 sqlite,它在内部使用 0/1 数字。 这将产生类型错误,因为 NSNumber 不遵循 @NSManaged completed: Bool 类型 您的变量应该是NSNumber,除非您在创建核心数据模型文件时明确选中“使用标量值作为基元”。 看起来在子类中将数据类型更改为NSNumber 有效。 看到这个帖子,类似:***.com/questions/24333507/… 【参考方案1】:

遇到同样的问题,解决办法确实是在@NSManaged 属性中使用NSNumber。此外,您可以定义一个计算的 Bool 属性,以便您可以在业务逻辑中使用标量布尔值,而不是使用 NSNumber。

var isCompleted: Bool 
get 
    return completed == NSNumber(bool: true)

set 
    completed = NSNumber(bool: newValue)


【讨论】:

嘿,我有同样的问题,但在检索布尔值时。当它在模态中显示为 bool 类型时,它被存储为 Integer。我需要根据 bool/integer 值显示一些东西。这是你知道的吗? commentsList[indexPath.row].isSigned 给出 Bad_access 异常。【参考方案2】:

我只是考虑提交一个错误,因为我有同样的问题,但如果你真的想使用 Bool,那么解决方法是使用这种方法:

setValue(true, forKey: "completed")

【讨论】:

【参考方案3】:

我几乎遇到了这个问题。

布尔值适用于 Core Data。

我遇到的问题是在“配置”和“C”默认值下的核心数据编辑器中。我没有将我的实体链接到正确的类。

【讨论】:

【参考方案4】:

您可以使用带有 NSManagedObject 的 swift Bool - 不需要 NSNumber 废话。但是您需要确保在核心数据编辑器中,该类不为空。输入对象的名称。

【讨论】:

以上是关于尝试更改 Bool 属性时出现 EXC_BAD_ACCESS 错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Excel VBA 中设置 RefersToRange 属性时出现问题

使用必要的 WHERE 子句时出现“在 bool 上调用成员函数 bind_param()”错误 [重复]

更新实体时出现异常“无法更改关系,因为一个或多个外键属性不可为空”

尝试在 MasterPage 中查找控件时出现问题

尝试更改上传目录时出现空白页面

尝试更改 kivymd 标签文本时出现 KeyError