2013-03-20 43 views
2

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

如果字典数[count]发生变化,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

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

- (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:中,但实现索引访问器可以一劳永逸地解决它。

+0

感谢您的回复。我会放弃它。与此同时,只需对数组进行去引用,然后创建一个新数组。 selectedJobNotes = nil; 笨拙,可能是错误的做法,但它短期有效。 我会尽力实现这些方法。 我想我尝试了willChange/didChange,但他们没有工作。可能没有正确实施。 – Steve 2013-03-25 08:18:38

+0

实现了这些方法,但我仍然必须销毁并重新创建数组才能获得所需的结果。可能仍然比以前做得更好。 – Steve 2013-03-25 09:40:13