2013-03-20 74 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