我有3个tabbar项目,每个项目都是一个视图控制器。第一,第二和第三视图控制器。我需要First ViewController来调用在第二个视图控制器视图上更新tableview的方法。我不确定处理这个问题的正确方法是什么。我尝试了一个sharedInstance,但我认为正在发生的是正在创建两个实例,并且第一个VM正在使用的视图控制器与应用程序中实际使用的VM不同,这可以解释为什么我的tableview不是'更新。
基本上,当我在First View Controller中上传文件时,我需要第二个VM来更新tableview并显示文件的上传进度。有点像在iTunes上购买歌曲时。这些是标签项的UINavigationViewControllers。
我试过了:
+ (SecondViewController *)sharedInstance {
// Singleton implementation
static SecondViewController* instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[SecondViewController alloc] init];
});
return instance;
}
- (void)viewDidLoad
{
[super viewDidLoad];
UploadTableView.dataSource = self;
UploadTableView.delegate = self;
[S3UploadClientManager tm].delegate = self;
}
答案 0 :(得分:1)
您不希望控制器直接相互通信。如果您正在转向其他视图,则可以使用prepareForSegue
。如果您不想使用它,我建议您更新两个控制器都可以访问的文件或数据库,以避免直接交互并保留mvc架构。
答案 1 :(得分:0)
您可以实现tabBarController委托方法:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if([viewController isMemberOfClass[SecondViewController class]]) {
//pass the data here
}
}