问题标签 [kvc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1338 浏览

ios - mutableArrayValueForKey NSMutableArray 在删除对象时崩溃

我正在使用以下代码崩溃。self.items是具有字符串类型属性的 of NSArrayNSManagedObjects"id"

这是崩溃消息:

在调试器中打印出来表明这allID是 aNSKeyValueSlowMutableArray而不是__NSArrayM常规的NSMutableArray.

所以我把它改成了这个,它可以工作:

NSMutableArray *allIDs = [[self.items valueForKey:@"id"] mutableCopy];

这两个调用之间有什么区别会使前者崩溃但后者起作用?我怀疑这与 KVO 和代理集合有关,但不太了解。

0 投票
1 回答
210 浏览

ios - valueForKeyPath 可以计算总和的最大值吗?

我有以下 Objective-C 类:

给定NSArrayof GraphDataPoint,我知道如何计算value最大值

现在我想更改value为一个数组values

是否有类似的方法来计算using中每个属性之的最大值?(我知道我可以编写一个嵌套循环来手动解决它。)valueGraphDataPointNSArrayvalueForKeyPath

0 投票
1 回答
95 浏览

ios - 如果我实现了一个执行验证的 setXXX 方法会发生什么?

关于确保 KVC 合规性
该文件说:

您对该-set<Key>:方法的实现不应执行验证。-validate<Key>:error:如果验证适用于密钥,您的类应该实现。

如果我实现执行验证的 setXXX 方法,就会发生这种情况

使用kvo会导致性能问题吗?

0 投票
1 回答
63 浏览

objective-c - KVC 如何处理速度和错误?

我一直在阅读有关 KVC 和 Cocoa Scripting 的内容,以及如何为此使用属性。我有一个模型类,但元素/属性数据必须从 Internet 获得。但是属性和 KVC 的设计看起来像是假设快速和内存检索,而网络调用可能很慢和/或容易出错。这些如何调和?

为了速度,我们只是说“去他妈的”并发布一个等待图标吗?(当然,我们应该保持多线程,这样 UI 在我们等待时不会停止。)

如果您的属性应该始终可用,我们可以将其设置为nil资源调用出错时。但是我们没有办法得到细节。更糟糕的是支持“缺失值”的属性,然后nil将表示它,我们将没有备用状态用于错误。

尽管 Apple 事件支持错误处理,但我无法使用它,因为在我可能会产生错误的模型调用和 Apple 事件之间,KVC 层会将错误放到地板上(被遗忘)。Scripting Bridge API 发现了这个问题,因为它的设计者添加了一个秘密协议来处理错误。

我错了吗?有没有办法处理基于 KVC 的设计的错误?

附录

我忘了提到例外。Objective-C 现在支持它们,但我读到的关于它们的信息很少暗示它们是用于灾难性的“而不是直接崩溃”的,而不是用于像 C++ 中那样的常规错误处理。除此之外,它们可能在这里有用......

0 投票
1 回答
1163 浏览

cocoa - Model Key Path With Multiple Properties

Here, I'm using an NSArrayController to bind properties from Core Data entities into the value of text view table cells.

enter image description here

What syntax do I use to access multiple properties of the entity in the Model Key Path?

Example as a format string: @"%@, %@", lastName, firstName;

0 投票
0 回答
56 浏览

objective-c - 在 Objective-C 中声明集合访问器方法是必要的吗?

我今天有一个快速的。假设我有一个名为BSDHistoryManager. 它是一个简单的状态历史记录器,就像在 Web 浏览器中一样(又名History对象 [ window.history])。以下是 .h/m 文件的简化示例:

BSDHistoryManager.h

BSDHistoryManager.m

正如你所看到的,我在内部有一个标准的可变集合,当使用 getter 访问它时会复制它,这样内部就不会被弄乱。此时,我想添加一些公共访问器方法,例如-addState:-removeState:等。例如,我喜欢像这样制作自己的访问器:

但是,我也想定义 KVC 方法。你知道,看起来像这样的那些:

现在我两者都有了,这很酷,但我希望我的类界面美观整洁,因此更易于阅读和理解。我的问题是:在实现KVC 访问器模式时,我是否需要声明这些方法,还是仅通过实现这些方法来“免费”获得 KVC 合规性?或者更好的问题是:如果我制作自己的自定义命名方法,我什至需要实现 KVC 方法吗?

希望这是有道理的,但如果没有,我会尝试更好地解释它。谢谢阅读!

0 投票
1 回答
181 浏览

objective-c - 使用超类的设置器时未发送 KVO 通知

我有一个定义属性的 ClassA:

该实现不会覆盖访问器。

ClassB 会覆盖 setter 来做一些额外的工作:

在 ClassB 的另一种方法中,我尝试通过超级设置器设置此属性,以跳过额外的工作:

当我这样做时,不会发送该属性的 KVO 通知。如果我做同样的事情,但使用self,KVO 通知按预期工作:

这里发生了什么?这是预期的行为吗?我找不到任何可以这么说的东西。

0 投票
1 回答
209 浏览

core-data - 2 MOC之间的Core Data“Deep Copy”,处理To-Many关系,使用KVC集合代理对象

我正在尝试将托管对象从源持久存储到现有持久存储执行“深度复制”。借用任务代码以在目标上下文中建立多对多关系。完整的代码在这里

我的困惑在于下面的方法

我的问题是,之后

,这是在“集合代理对象”(由mutableSetValueForKey:调用产生)上执行的,并且没有从此方法返回结果(明确地通过参数或返回值)

,如何确保在目标上下文中创建了一个 NSMutableSet(由复制相关对象组成)?或者我永远不需要在目标上下文中引用此类“复制集”?目标上下文中的对象图是否可以通过使用通过 KVC 实现的“集合代理对象”围绕“复制对象”(代表“多对多”关系的 ONE 端)神奇地建立?

0 投票
2 回答
172 浏览

ios - NSMutableDictionary setValue:forUndefinedKey

我正在开发一个 iOS 应用程序。我有一个扩展 NSObject 的类,它定义了 1 个属性

我收到这个错误。 *由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类与键 myUndefinedKey 的键值编码不兼容。”

我过去曾将 NSMutableDictionary 用于 kvc、kvo。是的,我看到该类不符合 kvc。

0 投票
1 回答
250 浏览

macos - MKMapAnnotationManager 不移除自己作为 MKAnnotation 的观察者

我仍在努力,但认为值得一问:

我有一个符合MKAnnotation协议的类,称为AMAnnotation. 这个类还实现了setCoordinate:

我可以成功地将注释添加到地图中,并且可以调用setCoordinate:并且图钉将在地图上移动。但是有一个问题。有时,当地图被释放时,程序会暂停NSKVODeallocateBreak并显示以下消息:

我自己没有添加任何观察者,所以我覆盖了我AMAnnotation班级的 KVO 方法。事实证明,每次setCoordinate:在将注释添加到地图后调用,我都会看到以下内容:

现在,我不知道是什么_original_setCoordinate:,谷歌没有帮助。它看起来像MKMapAnnotationManager重新添加自己作为观察者,但并没有删除自己。

有时当地图被释放时,我看到它会多次删除自己。但其他时候根本没有,这是警告出现的时候。

有人对此有解释吗?谢谢。