gpt4 book ai didi

cocoa - mutableArrayValueForKey 和调用 insertObject 之间的区别 :inEmployeesAtIndex: directly

转载 作者:行者123 更新时间:2023-12-03 17:17:23 24 4
gpt4 key购买 nike

我有一个关于使用 KVO 兼容方法从数组中插入/删除对象的问题。我正在阅读 Aaron Hillegass 的 Mac OS X Cocoa 编程,我看到了以下代码行(在 insertObject:inEmployeesAtIndex: 方法中:

[[undoManager prepareWithInvocationTarget:self] removeObjectFromEmployeesAtIndex:index];

如果我错了,请纠正我,但我一直认为最好先调用 mutableArrayValueForKey: 然后 removeObjectAtIndex:...所以我尝试更改上面的行对此:

[[undoManager prepareWithInvocationTarget:[self mutableArrayValueForKey:@"employees"]] removeObjectAtIndex:index]; 

但它不起作用。有人可以解释其中的区别以及为什么第一行有效但第二行无效吗?

更新:我的removeObjectFromEmployeesAtIndex:index方法的实现是为了使我的集合类(NSMutableArray的实例)符合KVC。因此,最终,调用 [[self mutableArrayValueForKey:@"employees"]removeObjectAtIndex:index]; 应该最终调用 [self removeObjectFromEmployeesAtIndex:index];

最佳答案

在您的更新中您说:

calling [[self mutableArrayValueForKey:@"employees"] removeObjectAtIndex:index]; should end up calling [self removeObjectFromEmployeesAtIndex:index];

不幸的是,无论您的 removeObjectFromEmployeesAtIndex: 方法中有什么,这都是不正确的,因为 NSMutableArray 永远不会调用您的类中的任何方法。由于您似乎正在尝试获取撤消/重做功能,因此您必须使用类似 removeObjectFromEmployeesAtIndex: 的方法。否则,当您点击撤消添加员工时,您将无法“重做”添加该员工。您还可能会遇到撤消/重做对个别员工进行编辑的问题。如果您愿意,可以将 removeObjectFromEmployeesAtIndex: 方法中的行 [employees removeObjectAtIndex:index]; 更改为 [[self valueForKey:@"employees"]removeObjectAtIndex:index];[self.employeesremoveObjectAtIndex:index]; 但确实没有理由走这条路。

关于cocoa - mutableArrayValueForKey 和调用 insertObject 之间的区别 :inEmployeesAtIndex: directly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3027616/

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