0

我有 3 个标签栏项目,每个项目都是一个视图控制器。第一、第二和第三视图控制器。我需要 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;

 }
4

2 回答 2

1

您不希望控制器直接相互通信。如果您要切换到另一个视图,则可以使用prepareForSegue. 如果您不想使用它,我建议您更新两个控制器都可以访问的文件或数据库,以避免直接交互并保留 mvc 架构。

于 2013-05-28T03:21:01.593 回答
0

您可以实现 tabBarController 委托方法:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if([viewController isMemberOfClass[SecondViewController class]]) {
//pass the data here
}
}

于 2013-05-28T03:34:13.930 回答