我正在开发一个基于Apple提供的Master-View模板的应用程序(它由两个ViewControllers,MasterViewController和DetailViewController组成)。我添加了一个Model来与我的服务器进行通信。
但是,当我的Model从服务器收到消息时,它需要调用MasterViewController或DetailViewController类中的方法。我怎么能这样做?
非常感谢所有帮助。
答案 0 :(得分:3)
您可以从模型中触发通知,这些通知由Master和Detail View控制器处理。
在模型中:
- (void)receivedMessageFromServer {
// Fire the notification
[[NSNotificationCenter defaultCenter] postNotificationName:@"ReceivedData"
object:nil];
}
在视图控制器中处理“ReceivedData”通知:
- (void)viewDidLoad {
[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receivedDataNotification:)
name:@"ReceivedData"
object:nil];
}
- (void)receivedDataNotification:(id)object {
NSLog(@"Received Data!");
}
答案 1 :(得分:3)
实际上MVC pattern that Apple proposes允许从模型到控制器的通知。
实现这一目标的一个好方法可能是在数据发生变化时通过NSNotification传递NSNotificationCenter个对象,并提供有关更改内容的信息,并让听众负责处理。
答案 2 :(得分:2)
您应该使用可选的协议委托方法。我有一个答案,例如如何在PO中设置委托方法。
答案 3 :(得分:1)
阻挡是可行的方法。
您需要在ViewController中引用模型。当您想要更新数据时,您向模型发送消息并将块作为参数传递给它,当从服务器收到响应时将调用该块。
例如:
查看控制器
[self.model fetchDataFromRemoteWithCompletionHandler:^(id responseObject, NSError *error)
{
// responseObject is the Server Response
// error - Any Network error
}];
<强>模型强>
-(void)fetchDataFromRemoteWithCompletionHandler:(void(^)(id, NSError*))onComplete
{
// Make Network Calls
// Process Response
// Return data back through block
onComplete(foobarResponse, error);
}