1)我有两个控制器,fistViewController,secondViewController。
2)第一个控制器实现委托说“xyzDelegate”。
@interface FirstViewController : UIViewController <xyzDelegate>
3)First View Controller中的委托方法刷新UIViewTable。
4)第一个控制器:推送第二个视图控制器。
SecondviewController *svc = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
svc.delegate = self;
[self.navigationController pushViewController:svc animated:YES];
4)在第二个视图控制器中:
id<xyzDelegate> strongDelegate = self.delegate;
[self.navigationController popViewControllerAnimated:YES];
NSLog (@"After popViewControler");
[strongDelegate dateSelected:dateChoosen]; // Invoking Delegate Method.
问题:
1)弹出视图控制器后调用委托方法的一般做法是什么? 因为我正在刷新UITable,一旦在FirstView Controller中调用了委托方法。
答案 0 :(得分:2)
您应该调用委托方法 BEFORE POP操作。
[strongDelegate dateSelected:dateChoosen];
popViewControllerAnimated将调用第二个视图控制器dealloc方法进行销毁,在那里释放strongDelegate。所以不再需要strongDelegate来接收dateSelected:方法。
[self.navigationController popViewControllerAnimated:YES];
答案 1 :(得分:1)
通常,视图控制器是一个独立的屏幕单元。特别是如果它由导航控制器切换。您需要重新配置视图,以便在覆盖viewWillAppear:
或viewDidAppear:
方法之一的情况下绑定其数据。
通常viewDidAppear:
是首选。因为在许多情况下,切换视图需要重新加载底层数据,这通常会导致异步I / O.在这种情况下,此异步I / O 可能同时干扰执行视图切换动画。
无论如何,如果您的视图设置操作是轻量级的,那么使用viewWillAppear:
会更好,更好,因为它会让您的用户等待更少。
在这种情况下,IMO,似乎最好的办法就是标记刷新目标视图控制器上的数据,并在视图控制器的viewDidAppear:
方法中处理刷新。