问题是因为 self.parentViewController 的类型是“UIViewController”,而您的 -loadInitialData 方法在 UIViewController 中不存在。有几种常见的方法可以解决这个问题......从最简单和最不“正确”到最复杂和最“正确”:
1) 首先,您需要将 self.parentViewController 转换为父视图控制器的类型。比如:
MyParentViewController *parentVC = (MyParentViewController*)self.parentViewController;
[parentVC loadInitialData];
2) 您可以向模态视图控制器添加一个属性,该属性显式保留对父视图控制器的引用,然后调用 loadInitialData 执行此操作。
@interface MyModalViewController : UIViewController {
MyParentViewController *myParentViewController;
}
@property (nonatomic, retain) MyParentViewController *myParentViewController;
然后你可以调用:
[self.myParentViewController loadInitialData];
3) 最复杂但最正确的方法是创建一个委托协议,让您的 ParentViewController 实现该协议并让您的模态视图控制器保留对委托的引用并以这种方式调用。比如:
@protocol ManageDataDelegate
- (void) loadInitialData;
@end
@interface MyParentViewController : UIViewController <ManageDataDelegate> { ...
@interface MyModalViewController : UIViewController {
id<ManageDataDelegate> delegate;
}
@property (nonatomic, assign) id<ManageDataDelegate> delegate;
当您展示您的模态视图控制器时,只需设置委托。在您的 MyParentViewController 中:
MyModalViewController *vc = [[MyModalViewController alloc] init];
vc.delegate = self;
[self presentModalViewController:vc];
然后在您的模态视图控制器中,您可以像这样回调:
[self.delegate loadInitialData];