我可以在popViewcontroller之后调用委托方法吗?

时间:2014-07-15 09:41:49

标签: ios uiviewcontroller delegates

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中调用了委托方法。

2 个答案:

答案 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:方法中处理刷新。