【发布时间】:2014-06-24 20:13:16
【问题描述】:
我一直在阅读有关 KVC 和 Cocoa 脚本以及如何为此使用属性的文章。我有一个模型类,但元素/属性数据必须从 Internet 获得。但是属性和 KVC 的设计看起来像是假设快速和内存检索,而网络调用可能很慢和/或容易出错。这些如何调和?
为了速度,我们是否只是说“去他妈的”并发布一个等待图标? (当然,我们应该保持多线程,这样 UI 在我们等待时不会停止。)
如果您的属性应该始终可用,如果资源调用出错,我们可以将其设置为 nil。但是我们没有办法得到细节。更糟糕的是支持“缺失值”的属性,然后nil 将代表它,我们将没有备用状态用于错误。
虽然 Apple 事件支持错误处理,但我无法使用它,因为在我可能会产生错误的模型调用和 Apple 事件之间,KVC 层会将错误放到地板上(被遗忘)。 Scripting Bridge API 发现了这个问题,因为它的设计者添加了一个秘密协议来处理错误。
我错了吗?有没有办法处理基于 KVC 的设计的错误?
附录
我忘了提到例外。 Objective-C 现在支持它们,但我读到的关于它们的信息很少暗示它们是用于灾难性的“而不是直接崩溃”的,而不是用于像 C++ 中那样的常规错误处理。除此之外,它们可能在这里有用....
【问题讨论】:
-
不太清楚你在问什么。 KVC 与网络有什么关系?
-
KVC 只是一种在对象上调用方法的方式。它并不特定于模型对象,因此您可以在这些方法中处理错误和网络,就像在其他任何地方一样。有趣的是 KVO 的东西,具有依赖的键路径等。
-
具有特定类型签名的方法,即。
-
@Dima,我在问是否可以将 KVC 方法挂接到不会立即返回的代码中;它不是立即从内存中返回答案的方法,而是让调用者等待几秒钟的网络下载。
-
@stevesliva,我见过的 KVC/KVO 签名只处理结果,没有留下返回错误的方法。那么如果核心代码确实返回错误,丢弃错误并返回
nil,会发生什么?
标签: objective-c cocoa properties kvc