核心数据 managedObjectContext 未随 UI 更改而更新

Posted

技术标签:

【中文标题】核心数据 managedObjectContext 未随 UI 更改而更新【英文标题】:Core Data managedObjectContext not being updated with UI changes 【发布时间】:2013-08-08 01:19:25 【问题描述】:

在使用绑定到核心数据 NSManagedObjects 的 UI 控件更新核心数据对象时,我突然遇到了一个奇怪的问题。

症状如下: - OutlineView 显示分层对象的列表 - 详细视图显示所选对象的数据字段,包括文本字段、日期等。 - 在详细视图中进行更新时,这些会反映在 OutlineView 中(例如,在 OutlineView 中使用 diplayName)。 - 但是,当我保存更改时 managedObjectContext 告诉我没有要保存的更改。因此,出于某种原因,UI 不会让上下文知道事情发生了变化。 - 鉴于绑定是在 IB 中完成的,我假设 UI 中的任何更改都会自动反映在 managedObjectContext 中 - 出于某种原因,其中一个字段似乎总是导致上下文认识到已进行更改,但其他字段没有。这个字段恰好是一个弹出列表,其中包含来自核心数据数据库中另一个实体的对象。

如果有人对可能导致此问题的原因有所了解 - 是否有任何方法可以监控何时进行 UI 更改,例如更改文本字段中的文本,以及这些更改是否传播到 managedObjects。

编辑 发现了问题——出于某种原因,我在核心数据实体的objective-c 类中将一些属性从@dynamic 更改为@synthesize。这太糟糕了!

【问题讨论】:

我想我找到了问题。 【参考方案1】:

IBOutlets 需要连接到回调,以便知道更改。除非您将其连接起来,否则他们不会报告更改。因此,即使 textField.text != oldText,也没有关系,除非您进行该更新,将其保存到实体中,然后查看它是否识别

【讨论】:

以上是关于核心数据 managedObjectContext 未随 UI 更改而更新的主要内容,如果未能解决你的问题,请参考以下文章

核心数据,初始化 managedObjectContext

核心数据:无法获取 managedObjectContext 和模型

核心数据:从多个 ManagedObjectContexts 中获取对象

核心数据 managedObjectContext 未随 UI 更改而更新

在核心数据的类之间传递 managedObjectContext 时出错

核心数据未在 managedObjectContext 中保存和崩溃