【问题标题】:Accessing coredata `faults` makes all coredata properties NIL in viewController访问 coredata `faults` 会使 viewController 中的所有 coredata 属性为零
【发布时间】:2017-06-13 11:17:03
【问题描述】:

我正在从 coredata 表 STUDENT 中获取数据,并使用 Array 在 tableview 中显示所有学生姓名。在选择任何一个学生姓名后(点击 tableViewCell),它会从另一个表中获取学生的完整详细信息并显示在下一个配置文件视图控制器中。

现在的问题是,在配置文件视图控制器中,我正在打开 iPhone 的控制中心(打开蓝牙/Wifi/音乐等),并且在我关闭控制中心后,我的所有变量都变为 nil,即使我弹出上一个屏幕(这是所有学生姓名的列表),它显示空白表格。

当我调试这个问题时,我发现我的学生数组在弹出视图控制器期间变为 Nil。仅当我在使用应用程序时打开控制中心托盘时才会出现此问题,否则它会按预期维护所有数组和变量。

我不知道为什么它在父视图控制器中创建数组 Nil。我正在访问配置文件视图控制器中的控制中心,它在父视图控制器中重置了我的数组。

我不知道为什么会这样?有什么办法可以解决吗?打开控制中心后,是否需要重新设置所有变量?是否有任何状态维护问题或什么?有没有coredata相关的问题?

错误是这样的:

5 elements
      - 0 : <Student: 0x17468c670> (entity: Challenge; id: 0xd0000000665c0006 <x-coredata://C8F37C3F-3153-4EA5-9914-0CEBEB5731E4/Challenge/p6551> ; data: <fault>)
      - 1 : <Student: 0x17488b4f0> (entity: Challenge; id: 0xd000000066600006 <x-coredata://C8F37C3F-3153-4EA5-9914-0CEBEB5731E4/Challenge/p6552> ; data: <fault>)
      - 2 : <Student: 0x174887a80> (entity: Challenge; id: 0xd000000066640006 <x-coredata://C8F37C3F-3153-4EA5-9914-0CEBEB5731E4/Challenge/p6553> ; data: <fault>)
      - 3 : <Student: 0x17488b270> (entity: Challenge; id: 0xd000000066680006 <x-coredata://C8F37C3F-3153-4EA5-9914-0CEBEB5731E4/Challenge/p6554> ; data: <fault>)
      - 4 : <Student: 0x1746823f0> (entity: Challenge; id: 0xd0000000666c0006 <x-coredata://C8F37C3F-3153-4EA5-9914-0CEBEB5731E4/Challenge/p6555> ; data: <fault>)

这里 data&lt;fault&gt;,数组包含 5 个对象,但是当我尝试访问该对象属性时,它们是 Nil。似乎 coredata 对象变为空白。

我正在使用 swift 3.0、Xcode 8。iOS 10.2。请寻求帮助。

【问题讨论】:

    标签: ios iphone swift core-data


    【解决方案1】:

    Fault 是用于管理内存使用的核心数据功能。

    没有错误。

    如果您访问 Student.data 属性,核心数据将获取请求,然后您将获得整个数据。

    【讨论】:

    • 如果我尝试访问Student.name,它会给我nil。如何访问.data 属性。我想应该是nil? coredata 实体中的Delete Rule 有什么问题吗?我将所有表关系设置为nullify
    • 查看这篇文章:code.tutsplus.com/tutorials/…。希望对你有帮助
    • 我得到了你想要解释的解释,但是如何将fault 绑定回coredata?我还阅读了 [Apple Coredata 编程指南] (developer.apple.com/library/content/documentation/Cocoa/…)。但找不到任何解决方案。 :( 例如,如果我在后台移动我的应用程序并回到前台,coredata 属性变为 nil(即错误)。然后,我无法访问属性。Student.name 始终为零。如果我重新加载表,它显示空白表。
    【解决方案2】:

    您是在班级的财产还是单身人士中持有NSManagedObjectContext?如果没有,支持实体的托管对象上下文将被释放,并且您的实体将无法将数据错误地返回到内存中。控制中心可能导致内存压力自动驱逐实体数据。

    【讨论】:

      【解决方案3】:

      我找到了一个解决方案,将 coredata 对象 移动到 class 对象。现在它在类对象中自动维护数据,因为它是 iOS 中的默认行为。 谢谢大家的建议。

      【讨论】:

        【解决方案4】:

        我处理了创建单独的模型类。所以现在我只需要访问类对象,而不是 coredata 属性。这不是我正在寻找的确切解决方案,但它也可能是解决方案。它运行良好。 谢谢大家。!! :)

        【讨论】:

        • 嘿。你到底是怎么做到的?因为有时我的 NSManagedObject 是空的,上面没有值......它显示默认值,使我的视图为空。你能举例说明如何避免这种情况吗?
        • 你知道该怎么做吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多