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

2023-11-24

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

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

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?在你的情况下),然后使用可选绑定进行测试

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
}

Update:从 Xcode 6.2 开始,此解决方案不再有效 并因 EXC_BAD_ACCESS 运行时异常而崩溃 (比较Swift:在运行时检测到非可选中意外的 nil 值:强制转换为可选失败)

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


(旧答案:)

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

@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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查核心数据中是否设置了属性? 的相关文章

随机推荐

  • 如何判断所有Loading Data操作何时完成?

    我有一个 Sheets 电子表格 其中有许多单元格使用自定义函数 该函数调用 IMPORTHTML 并解析结果 工作表中的其他计算使用这些自定义公式单元格返回的值 正如预期的那样 当自定义公式单元格正在计算时 它们会显示 正在加载数据 错误
  • .NET 3.5 中 Enum.TryParse 的实现

    如何在 NET 3 5 中实现 NET 4 的 Enum TryParse 方法 public static bool TryParse
  • Spritekit 停止声音

    我目前正在使用 Apple 的 SpriteKit 库开发一款游戏 但在游戏开始播放后我无法停止声音 我尝试使用文档中列出的方法来阻止 Skaction 运行 但似乎没有什么可以阻止声音播放 这些都是我试图阻止声音的尝试 Playing s
  • 等待事件处理程序

    这是代表和事件 public delegate Task SomeEventHandler SomeEventArgs e public event SomeEventHandler OnSomething 订阅者 多个 some OnSo
  • 如何检测 pdf.js 是否是 Firefox 中的“默认”阅读器

    从 Firefox 19 开始 有一个内部默认的 PDF 阅读器 pdf js 如何检测这是否是默认阅读器 这可能就是您正在寻找的 http www pinlady net PluginDetect PDFjs
  • Ruby:自动将实例变量设置为方法参数?

    是否有计划实现类似于 CoffeeScript 功能 在方法参数列表中指定实例变量名称 的 ruby 行为 喜欢 class User def initialize name age name is set implicitly but a
  • 使用目录将 IPython 笔记本写入 HTML 或 PDF

    我正在尝试从我的 IPython 笔记本创建报告 我使用目录扩展为我的笔记本创建目录 我已经将笔记本转换为 html 但目录未显示 也未链接到文档的其余部分 有没有什么方法可以转换为指定的格式之一并仍然保留可链接 甚至不可链接 的目录 我使
  • 如何覆盖 Android 中虚拟键盘的 键行为

    I want to override the behaviour of the ENTER key of the virtual keyboard so that 当屏幕上有更多字段时 它会 跳到 下一个字段 当它是屏幕的最后一个字段时 执
  • 如何获取特定页面的所有 Facebook 签到?

    我有一个 Facebook 页面 它也是 FB 中的一个位置 因此用户可以签到该位置 例如使用 iPhone 现在我想从我的页面获取所有签入的用户 但即使有多个用户签入 我总是得到一个空数组 我使用 Graph API 中的以下 URI h
  • 确定 T-SQL 中的时区偏移

    我的数据库应用程序将部署在不同时区的多个站点 我需要一个 T SQL 函数来确定当年 1 月 1 日午夜的 UTC 时间戳 以进行 YTD 计算 所有数据都存储在 UTC 时间戳中 例如 芝加哥采用 UTC 6 夏令时 DST 如果该函数在
  • CURL 不编码 UTF-8

    我在用着Windows 10 and 卷曲7 52 1 当我尝试POST数据到 WEBSERVICE curl没有将字符编码为UTF 8 我需要显示pt BR字符 例如 etc 是的 我已经检查过this 没有成功 如果我将编码页面设置为c
  • Gradle 无法解析 Android Studio 中的库

    我想在 Android Studio 中包含一个库 但它显示如下错误 无法解析 com lemonlab expandable button menu 1 0 0 如何解决这个问题 apply plugin com android appl
  • 带有模板参数的 C++0x lambda? [复制]

    这个问题在这里已经有答案了 可能的重复 lambda 函数可以模板化吗 是否可以使用带有模板参数的 c 0x lambda 例如 template
  • 为 Linux 安装 Anaconda [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在尝试安装适用于 Linux 的 Anaconda Linux Mint 17 2 Rafaela 14 04 3 LTS Trusty Tahr 我看到一条警告 警告 机器似乎
  • 如果我的 url 包含路由参数,则哈希链接会以角度重新路由

    如果我有一个一级路由 那么哈希链接将按预期工作 无需重新路由 但是 我有一些国家 kh 的网址 如果我尝试使用诸如国家 kh projects 之类的哈希标签 页面会重新路由 这非常烦人 因此 如果我在页面国家 地区并单击链接 develo
  • 如果没有连续的内存空间,realloc 会做什么?

    realloc用于动态重新分配内存 假设我已经使用分配了 7 个字节malloc函数 现在我想将其扩展到 30 个字节 如果内存中没有30字节的连续 单行连续 空间 后台会发生什么 是否有任何错误或者内存是否会被分段分配 realloc幕后
  • MS Visual Studio 2010如何使用.asm生成的文件

    我想询问一些我想尝试使用 Visual Studio 2010 的事情 我通过在项目属性 gt C C gt 输出文件 FAs 中将选项设置为 汇编器输出 从 cpp 文件生成 asm 文件 我的问题是 下一步如何使用 asm 生成的文件从
  • 子类 UITableViewCell 中的 UIButton 需要调用父类的方法

    很抱歉 如果答案已经存在 但我找不到 我有以下设置 MainViewController 它有一个大的 UITableView 和 CustomTableViewCell 它是 UITableViewCell 的子类 CustomTable
  • 无法创建多可用区 Aurora RDS 实例

    当我恢复 MySQL 快照时 我可以选择将新实例设置为多可用区 但是 由于某种原因 当我恢复到 Aurora 时 多可用区部署 选择被禁用 我想这可能意味着它会自动启用 但是 当我转到正在运行的实例详细信息时 它特别列出了多可用区 否 我有
  • 检查核心数据中是否设置了属性?

    如何检查核心数据对象中是否设置了属性 我将所有核心数据对象加载到目录中 var formQuestions Questions 我的核心数据 NSManagementObject 是 NSManaged var noticeText Str