iPhone sdk在视图控制器之间传递消息

时间:2009-11-08 21:52:40

标签: iphone uiviewcontroller

我想知道iPhone开发中应用程序流程的最佳实践是什么 如何在ViewControllers之间传递消息? 你使用单身人士吗?在视图之间传递它还是有管理流程的应用程序的主控制器?

感谢。

2 个答案:

答案 0 :(得分:13)

我使用NSNotificationCenter,这对于这类工作来说非常棒。可以把它想象成一种简单的广播信息。

您希望接收消息的每个ViewController都会通知默认的NSNotificationCenter它想要监听您的消息,当您发送消息时,每个连接的侦听器中的委托都会运行。例如,

ViewController.m

NSNotificationCenter *note = [NSNotificationCenter defaultCenter];
[note addObserver:self selector:@selector(eventDidFire:) name:@"ILikeTurtlesEvent" object:nil];

/* ... */

- (void) eventDidFire:(NSNotification *)note {
    id obj = [note object];
    NSLog(@"First one got %@", obj);
}

ViewControllerB.m

NSNotificationCenter *note = [NSNotificationCenter defaultCenter];
[note addObserver:self selector:@selector(awesomeSauce:) name:@"ILikeTurtlesEvent" object:nil];
[note postNotificationName:@"ILikeTurtlesEvent" object:@"StackOverflow"];

/* ... */

- (void) awesomeSauce:(NSNotification *)note {
    id obj = [note object];
    NSLog(@"Second one got %@", obj);
}

将产生(以任何顺序取决于哪个ViewController首先注册):

First one got StackOverflow
Second one got StackOverflow

答案 1 :(得分:0)

NSNotification类有点重量级,但符合您描述的用法。它的工作方式是您的各种NSViewController注册NSNotificationCenter以接收他们感兴趣的事件

Cocoa Touch处理路由,包括为您提供类似单身的“默认通知中心”。有关详细信息,请参阅Apple的notification guide