我有一个RequestHandler类,它接受一些ViewController的请求并异步地在Web上获取数据。为了通知ViewController,它实现了一个协议,并将ViewController设置为它的委托。
现在,这个ViewController是一个TableViewController,当选择一行时,它会在NavigationStack上推送第二个ViewController。第二个(子)ViewController也需要使用RequestHandler。如何使它成为同一RequestHandler实例的委托?我怎样才能确保一旦我回到它就不会弄乱父TableViewController?
答案 0 :(得分:1)
两个视图控制器都需要相同的请求这一事实表明存在设计错误。视图控制器应显示模型的当前状态。它们不应直接处理活动的网络请求。
您应该拥有一组代表您数据的类。这些被称为模型。视图在屏幕上时,视图控制器应该只关心模型。所以一个合理的模式看起来像这样:
现在,如果用户在此视图上,或者已移至另一个视图,或移至另一个视图并返回,则无关紧要。在呼叫情况下,只要模型发生变化,当前视图就会更新。
答案 1 :(得分:0)
如果我理解正确,RequestHandler是您编写的类,那么您可以允许它为实现的协议接受多个委托(只需将委托存储在NSMutableArray中,这样您就可以添加代表。删除它们如你所愿)
现在,在创建新视图时,您可以将其“注册”到RequestHandler。如果视图将被关闭,您可以/应该从RequestHandler中取消注册。