Cocoa中不同ViewControllers之间的通信

时间:2013-09-30 11:44:22

标签: objective-c cocoa model-view-controller cocoa-design-patterns

我认为这个问题的答案可能很容易找到,但事实上并非如此。我基本上是关于MVC的最佳实践,但我需要一个更具体的答案来回应Cocoa的MVC实现。

假设您有一个MainView,它通过Bindings显示来自可变数组的数据,以及向该数组添加新Item的选项。现在,添加到数组的数据可能更复杂,甚至可能需要验证才能将其添加到数组中,或者可以创建数据类的对象。所以,我添加了一个新的MVC或更具体的VC对我的项目,这是一个可以输入所有数据的视图和一个保存它的按钮。对保存按钮的单击操作将导致验证开始,然后,如果验证成功,最终应将数据添加到阵列。

我想知道哪个是从AddViewController访问数组的最佳解决方案。共享的可变数组?在AddViewController中设置属性?

对于习惯MVC的人来说,答案可能很简单。此外,我能够访问阵列,但我真的想知道哪种方法最好。

1 个答案:

答案 0 :(得分:1)

Delegate concept是您解决所有问题的答案!

数据验证成功后,将数据传递给MainView控制器以添加到数组中:)

详情: 你的AddViewController应该有一个协议,并委托属性

@protocol AddViewControllerDelegate <NSObject>

-(void)addViewController:(AddViewController*)addViewController didCompleteWith:(id)data;

@end

@interface AddViewController : SuperClass

@property (nonatomic,weak)id<AddViewControllerDelegate>delegate;
...

@end

您的主视图控制器应该实现此协议,并将其设置为AddViewController委托。

验证数据后,AddViewController应该在委托上调用协议定义的方法。

-(void)dataValid:(id)data {
...
[self.delegate addViewController:self didCompleteWith:data]
...
}