我的问题在于更新一个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];
似乎也不起作用??!
答案 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 Accessors和Ensuring KVC Compliance。
您也可以将更新包装在willChange/didChange ValueForKey:
中,但实现索引访问器可以一劳永逸地解决它。