How could I really sync NSMutableArray with NSArrayController?
I've got class Dialog and NSArrayController in my UI which bind Content Array to Dialog.messages. When I add any new items directly in Dialog.messages they are also available in NSArrayController and everything looks good:
[Dialog addMessage: someMsgItem];
But I also need sort messages and it's works only for Dialog.messages and not for NSArrayController:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey: @"timestamp" ascending: YES];
_messages = [NSMutableArray arrayWithArray: [_messages sortedArrayUsingDescriptors: @[sort]]];
How can I make these changes are also available for my NSArrayController? This is a part of Dialog class implementation:
@implementation Dialog
@synthesize messages = _messages; // NSMutableArray
- (void) addMessage:(Message *)msg {
[self insertObject:msg inMessagesAtIndex:[_messages count]];
}
- (void) removeMessage:(Message *)msg {
[self removeObjectFromMessagesAtIndex:[self.messages indexOfObject:msg]];
}
- (NSArray *) messages {
return [_messages copy];
}
- (void) setMessages:(NSArray *)messages {
[self willChangeValueForKey:@"messages"];
_messages = [NSMutableArray arrayWithArray:messages];
[self didChangeValueForKey:@"messages"];
}
- (void) insertObject:(Message *)msg inMessagesAtIndex:(NSUInteger)index {
[_messages insertObject:msg atIndex:index];
}
- (void) removeObjectFromMessagesAtIndex:(NSUInteger)index {
[_messages removeObjectAtIndex:index];
}
@end