【发布时间】:2015-12-25 10:09:46
【问题描述】:
首先:我已经在这里阅读了几次与此问题相关的问题,我发布此内容时意识到人们可能会认为这是一个重复的问题。但是我不得不说,作为一个初学者,我还没有找到任何有用的信息,所以我带着这个问题希望能对我和其他人说清楚。
我如何理解 Bindings & KVC / KVO
考虑一下:我有一个数组(在我的 AppDelegate 中)、一个 ArrayController 和一个视图元素,比如 NSTableView。我已将 AppDelegate 中的 NSMutableArray 绑定到 ArrayController,而后者又绑定到 NSTableView。
在 NSTableView 中更改某些对象的属性会导致该对象的属性发生实际更改。到目前为止它有效。但是,更改 NSMutableArray 中的某些内容(例如添加项目)不会更新 NSTableView。
我读过的可能的解决方案
我现在已经阅读了多个答案。一个答案似乎表明我不应该向数组本身添加任何内容,而只能向 ArrayController 添加任何内容。我不确定这是否正确,但如果这是一个可能的解决方案,最好了解更多有关如何执行此操作的详细信息。
其他解决方案提到以下方法:
- valueForKey:
- valueForKeyPath:
- dictionaryWithValuesForKeys:
- valueForUndefinedKey:
- mutableArrayValueForKey:
特别是:
- mutableArrayValueForKey:
如何使用 mutableArrayValueforKey?
我不知道的是如何在我的应用程序中将这些方法与我的数组/ 一起使用。 mutableArrayValueForKey 方法返回一个 NSMutableArray。我必须用这个创建一个新数组吗?
现在,我正在做的就是这个。
self.vocabList = [[NSMutableArray alloc] init];
稍后,在一个方法中,我正在填充数组:
for (NSObject* o in meaningsArray)
{
NSLog(@"%@",o);
Vocab *temp = [[Vocab alloc] init];
[temp setValue:@"w" forKey:@"word"];
[temp setValue:@"m" forKey:@"meaning"];
[self.vocabList insertObject:temp atIndex:[self.vocabList count]];
}
如果到目前为止我所说的一切都是正确的,我的问题是: mutableArrayValueForKey: 在想要更新 NSTabeleView 时会出现在哪里?还是我一开始就误会了什么?
【问题讨论】:
标签: objective-c nsmutablearray nstableview key-value-observing cocoa-bindings