符合KVC标准的更新NSMutableArray持有NSDictionary的

时间:2013-03-20 13:17:15

标签: macos cocoa cocoa-bindings

我的问题在于更新一个NSMutableArray,它包含不同数量的NSDictionary。每个NSDictionary都有6个密钥,这些密钥根据用户在表视图中选择的记录从数据库中检索。该数组链接到NSArrayController,允许用户选择字典并查看内容。

如果字典的数量[count]发生变化,则arrayController会更新视图;没问题。但是,在表视图中的选择之间字典的数量是相同的,arrayController不会更新视图,但模型会更新。

arrayController在IB中绑定到模型数组,只要表格视图中的选择发生变化,模型数组就会更新。

使用:

[self.selectedJobNotes addObject:[self.jobNotes objectAtIndex:i]];

这不符合KVC。

然而使用(我认为符合KVC):

[[self.selectedJobNotes objectAtIndex:noteCount] setValue:[[self.jobNotes objectAtIndex:i]valueForKey:@“Content"] forKeyPath:@"Content"];

也不起作用。

有没有办法告诉ArrayController这是一个新数组/有新内容,所以重新加载。

[self.jobNotesArrayController fetch:self.a2gDataObject.selectedJobNotes];

似乎也不起作用??!

1 个答案:

答案 0 :(得分:1)

解决此问题的最佳方法是实现(和使用)索引访问器。在你的情况下,他们看起来像

- (void)insertObject:(NSDictionary *)dict inSelectedJobNotesAtIndex:(NSUInteger) index {
    [self.selectedJobNotes addObject:[self.jobNotes objectAtIndex:index]];
}


- (void)insertSelectedJobNotes:(NSArray *)notesArray atIndexes:(NSIndexSet *)indexSet {
    [self.selectedJobNotes insertObjects:notesArray atIndexes:indexSet];
}

参见KVC编程指南:Mutable Indexed AccessorsEnsuring KVC Compliance

您也可以将更新包装在willChange/didChange ValueForKey:中,但实现索引访问器可以一劳永逸地解决它。