【问题标题】:KVC compliant updates to NSMutableArray holding NSDictionary’s对持有 NSDictionary 的 NSMutableArray 的 KVC 兼容更新
【发布时间】:2013-03-24 11:57:20
【问题描述】:

我的问题在于更新包含不同数量的 NSDictionary 的 NSMutableArray。每个 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];

好像也不行??!

【问题讨论】:

    标签: macos cocoa cocoa-bindings


    【解决方案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: 中,但实施索引访问器可以一劳永逸地解决这个问题。

    【讨论】:

    • 感谢您的回复。我会试一试。同时,只是取消了对数组的引用,然后创建了一个新数组。 selectedJobNotes = nil;笨拙,可能是错误的方法,但它在短期内有效。我将尝试实现这些方法。我想我确实尝试了 willChange/didChange 但它们没有用。可能没有正确实施。
    • 实现了这些方法,但我仍然必须销毁并重新创建数组才能获得所需的结果。可能仍然比以前做得更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多