在我的模型我有一个名为事件对象的数组。 我想每当一个新的对象被添加到事件通知我的控制器。
我认为,一个好办法做到这一点是使用国际志愿者组织模式(添加从一个新的对象)的事件发生变化时得到通知
// AppDelegate
// events is a NSMutableArray @property/@synthesize etc...
[appDelagate addObserver:self
forKeyPath:@"events"
options:NSKeyValueObservingOptionNew
context:NULL];
但observeValueForKeyPath方法不会被调用,我发现数组是不兼容的志愿:-(
一种选择是通过调用willChangeValueForKey为的keyPath手动触发方法
// ViewController
[self willChangeValueForKey:@"events"];
[self.events addObject:event];
[self didChangeValueForKey:@"events"];
但是,这感觉沉重,因为我可能还跟踪的之前和之后我的事件阵列的状态,以便它可以从observeValueForKeyPath方法访问。
一种方法可以是使用标准的数组(而不是可变的),并创建/设置事件的新实例我要添加一个新的对象,每次,我也可以做持续跟踪有多少项目是在一个单独的属性可变数组(我希望你能看到@“events.count”)。
另一种选择是使用NSNotificationCenter。 我也看到了一些答案使用块暗示(但我不知道从哪里开始上)。
最后,我可以保持我的控制器的一个实例,在我的委托,只是发送相关消息?
// Delegate
[myController eventsDidChange];
它是奇怪,以保持从委托控制器的参考?
我努力理解如何选择这是最好的方法使用,所以对性能,将来的代码的灵活性和最佳做法的任何意见是非常感谢!