gpt4 book ai didi

objective-c - 使用 NSManagedObjectContextObjectsDidChangeNotification

转载 作者:搜寻专家 更新时间:2023-10-30 20:20:38 25 4
gpt4 key购买 nike

在我的许多 UIViewControllers 中,我根据数据状态更新某些控件。例如,我可能在 UITableViewController 上有一个编辑按钮,它应该只在有一个或多个项目时启用。或者我想限制可以添加的项目数量,否则禁用“添加”按钮。

每次我添加或删除一个项目(或采取任何其他可以添加/删除项目的操作)时,我都必须记住更新可能需要启用/禁用的任何控件。这在很大程度上是微不足道的,但感觉不舒服 - 有很多重复,我必须记住添加对 updateControlEnabled (或其他)的调用,每当我添加新功能时可能会影响数据。

然后我注意到 NSManagedObjectContextObjectsDidChangeNotification。阅读文档,看起来我可以在我的托管对象上下文发生变化时收到通知。这看起来很理想,但我有几个问题:

  1. 这是对NSManagedObjectContextObjectsDidChangeNotification?

  2. 如果一个 Controller ,我是否应该预测任何性能影响订阅这些并解析每个以查看是否需要更新用户界面?我将检查 userInfo 的每一个变化,而不是只有那些我知道我会关心的。

  3. 我应该在哪里订阅通知?我的 UIViewController 有一个引用上下文,这有帮助,但我不知道在哪里subscribe (loadView?viewDidLoad?init?) 这样 View Controller 将始终只有一个订阅。
  4. View Controller 将继续接收和处理通知当它在屏幕外时 - 启用和禁用控件作为数据模型受到其他地方的影响。这样可以吗?

我想我主要只是想知道是否还有其他人使用这种方法,如果使用,他们的经验如何。

最佳答案

问)这是对 NSManagedObjectContextObjectsDidChangeNotification 的适当使用吗?

A) 是的 - 我出于类似的目的在 OSX 上使用它。

问)如果 Controller 订阅这些并解析每一个以查看它是否需要更新 UI,我是否应该预见到任何性能影响?我将检查 userInfo 的每个更改,而不仅仅是那些我知道我会关心的更改。

A) 否 - 它通常是一小部分对象 - 直接更改的对象。

问)我应该在哪里订阅通知?我的 UIViewController 有一个对上下文的引用,这很有帮助,但我不知道在哪里订阅(loadView?viewDidLoad?init?)这样 View Controller 将始终只有一个订阅。

A) 好吧,在 View 显示之前您不能影响 UI - 所以可能是 viewDidLoad 或 viewWillAppear。后者的问题是你可能会根据推送/弹出获得它几次,所以也许我会在 viewDidLoad 中完成它。

Q) View Controller 在屏幕外时将继续接收和处理通知 - 当数据模型受到其他地方的影响时启用和禁用控件。这样可以吗?

A) 当然 - 当 View 重新出现时,所有元素都将正确设置。

您想做的是该通知的经典用法。只需检查它所在的线程 - 如果它不是 mainThread,那么您想在发布到 mainThread 的 block 中进行所有更改。

关于objective-c - 使用 NSManagedObjectContextObjectsDidChangeNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12448800/

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