如何在iOS视图控制器中进行双向通信?

时间:2014-06-08 20:30:01

标签: ios objective-c

让我首先描述我的情况。我有一个ViewController,它保留了一个GameManager的实例。 GameManager类封装了简单游戏的状态和逻辑。当GameManager中遇到某些状态时,我想执行一系列操作。例如:当游戏结束时,我想在对话框上显示游戏。如上所述,游戏逻辑位于GameManager,但是创建和定位新游戏的方法是在GameManager。对话框驻留在ViewController中。允许GameManager拨打电话'回到ViewController,我在分配时将ViewController的引用传递给// GameManager.m - (void) gameOver { [self.viewController showGameOver]; } ,并简单地调用ViewController上的方法。例如:

{{1}}

我的问题是:这是正确的,客观的方法吗?有更纯粹的方法来处理这个问题吗?我虽然使用积木可能更合适。

1 个答案:

答案 0 :(得分:0)

在此处实施delegation模式

在你的GameManager中

@protocol MyGameDelegate : <NSObject>

@required

- (void)gameManager(GameManager *)gameManager gameOverWithSuccess:(BOOL)success;

@end

并声明属性

@property (assign, nonatomic) id <MyGameDelegate> gameDelagate;
在viewContoller类

//  MyGameDelegate implementation

- (void)gameManager(GameManager *)gameManager gameOverWithSuccess:(BOOL)success {

    if (success) [self.viewController showGameOver];
}

做这样的事情,但要小心

@property (assign, nonatomic) id <MyGameDelegate> gameDelagate;

您使用not

strong

最后将gameDelagate设置为您的viewcontroller

希望你能理解。