gpt4 book ai didi

ios - 检查是否在核心数据中设置了属性?

转载 作者:IT王子 更新时间:2023-10-29 05:22:28 25 4
gpt4 key购买 nike

我如何检查核心数据对象中是否设置了属性?

我将我所有的核心数据对象加载到一个目录中:

var formQuestions = [Questions]()

我的核心数据 NSManagementObject 是:

@NSManaged var noticeText: String

formQuestions[indexPath.row].noticeText

//加载:

var fetchRequest = NSFetchRequest(entityName: "Questions")
fetchRequest.predicate = NSPredicate(format: "forms = %@", currentForm!)
formQuestions = context.executeFetchRequest(fetchRequest, error: nil) as [Questions]

我的属性“noticeText”可以为空或不为空,所以当我创建我的核心数据对象时,一些值可能没有设置。 (该属性在 Core Data 中设置为可选)

当我现在尝试证明是否存在值时,它总是给我带来“EXC_BAD_ACCESS...”

if(formQuestions[indexPath.row].noticeText.isEmpty == false)

我可以在创建核心数据对象时设置一个空字符串,但这不是一个好的解决方案。

那么我如何检查是否存在(可选的)和未设置的值?

提前致谢。

最佳答案

Xcode 7 更新:此问题已通过 Xcode 7 beta 2 解决。可选的核心数据属性现在定义为可选属性在 Xcode 生成的托管对象子类中。它不再是有必要编辑生成的类定义。


(上一个答案:)

在创建 NSManagedObject 子类时,Xcode 不会为那些在 Core Data 模型检查器中标记为“可选”的属性定义可选属性。这对我来说像是一个错误。

作为解决方法,您可以将该属性转换为一个可选的(as String? 在你的例子中)然后用可选的绑定(bind)测试它

if let notice = someManagedObject.noticeText as String? {
println(notice)
} else {
// property not set
}

在你的情况下是

if let notice = formQuestions[indexPath.row].noticeText as String? {
println(notice)
} else {
// property not set
}

更新:自 Xcode 6.2 起,此解决方案不再有效并因 EXC_BAD_ACCESS 运行时异常而崩溃(比较 Swift: detecting an unexpected nil value in a non-optional at runtime: casting as optional fails )

下面的“旧答案”解决方案仍然有效。


(旧答案:)

正如@Daij-Djan 已经在评论中指出的那样,您必须为可选的核心数据属性作为可选隐式解包可选:

@NSManaged var noticeText: String? // optional
@NSManaged var noticeText: String! // implicitly unwrapped optional

不幸的是,Xcode 在创建时没有正确定义可选属性NSManagedObject 子类,这意味着您必须重新应用更改如果您在模型更改后再次创建子类。

此外,这似乎仍未记录,但两种变体都在我的测试用例中起作用。

您可以使用 == nil 测试该属性:

if formQuestions[indexPath.row].noticeText == nil {
// property not set
}

或使用可选赋值:

if let notice = formQuestions[indexPath.row].noticeText {
println(notice)
} else {
// property not set
}

关于ios - 检查是否在核心数据中设置了属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25661120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com