我有一个视图控制器,我们称之为HomeViewController
,它会弹出一个警报视图,而没有任何按钮说“请等待连接到服务器”。在等待时,视图控制器调用另一个类(ServerConnection
)中的方法,该类将数据发送到服务器。
我需要做的是在收到服务器响应后取消该警报,但如果我执行以下操作则无效:
HomeViewController *hvc = [[HomeViewController alloc] init];
[hvc waitAlertCancel];
//note:waitAlertCancel is a method that calls the following line of code:
[waitAlert dismissWithClickedButtonIndex:0 animated:TRUE];
如何从其他班级取消该警报视图,我该怎么办?
答案 0 :(得分:3)
如果您需要在事件发生后从另一个类调用一个类中的代码,blocks是完美的解决方案。在块可用之前,你通常使用委托模式来处理这样的设计,这很好,但是在像你这样只需要解除警报的情况下它可能很苛刻。因此,使用块是一个更清洁的解决方案,IMO。
在ServerConnection
类中创建一个使用块进行回调的方法。
- (void) connectWithCompletionBlock(void(^))completionBlock;
然后你会像这样调用connectWithCompletionBlock:
方法:
[myServerConnection connectWithCompletionBlock: ^ { [waitAlert dismissWithClickedButtonIndex:0 animated:TRUE]; }];
ServerConnection
对象收到服务器响应后,您可以让它运行完成块。
答案 1 :(得分:0)
使用NSNotification。让处理服务器请求的对象发布一个完整的通知。让您的家庭视图控制器听取它并做出相应的响应。