尝试更改 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()”错误 [重复]