【问题标题】:Trying to pass data between tab bar controllers试图在标签栏控制器之间传递数据
【发布时间】:2015-06-25 07:13:32
【问题描述】:

我正在尝试在标签栏中的视图之间传递一些数据。我的第一个视图能够从我的模型类中加载数据并对其进行操作。但是当我点击标签栏控制器中的第二个或第三个标签时,数据不会被传递。这是我试图通过它的方式。

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{

if (tabBarController.selectedIndex == 1){
HashTagTableViewController *hash [[HashTagTableViewController alloc]init];
    hash.userArray = feed.userArray;
}else if (tabBarController.selectedIndex == 2){
    PhotoTagTableViewController *photo = [[PhotoTagTableViewController alloc]init;
    photo.userArray = feed.userArray;

}

}

feed 是我在当前视图控制器中创建的模型类实例的名称。我试图避免创建模型类的多个实例,因为它必须对 API 进行多次调用。我要做的就是将feed.userArray 传递给不同的视图以进行不同的操作。

【问题讨论】:

  • 所以feed 是您的模型数据。您正在做正确的事情并正确使用 MVC 模式。现在您需要设置一些断点并检查数据在设置阶段的样子,然后从视图控制器的角度来看。
  • 在这个阶段,hash.userArray 设置得很好。但是当它切换到 HashTagTableViewController 时,hash.userArray 变成了空的。

标签: ios objective-c tabview


【解决方案1】:

不要在此方法中创建视图控制器。 UITabBarController 在初始化时自动创建所有视图控制器。试试这个:

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
    if (tabBarController.selectedIndex == 1){
        HashTagTableViewController *hash = (HashTagTableViewController *) viewController;
        hash.userArray = feed.userArray;
    }else if (tabBarController.selectedIndex == 2){
        PhotoTagTableViewController *photo = (PhotoTagTableViewController *)viewController;
        photo.userArray = feed.userArray;
    }
}

【讨论】:

  • 崩溃并出现此错误:[UINavigationController setUserArray:]: unrecognized selector sent to instance 0x7fc5fb4cf880
【解决方案2】:

您正在创建新的 ViewController 实例。取而代之的是,您需要从 TabBarController 的 ViewController 数组中获取选定的视图控制器。我已经改变了你的代码。所以请在下面查看。

注意:

请解决拼写错误/方法名称。因为我已经在记事本上写了这个。不在xcode中。

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    if([viewController isKindOfClass: [HashTagTableViewController class]]) 
    {   
        HashTagTableViewController *hash = (HashTagTableViewController) viewController;
        hash.userArray = feed.userArray;
    }
    else if([viewController isKindOfClass: [PhotoTagTableViewController class]]) 
    {
        PhotoTagTableViewController *photo = (PhotoTagTableViewController) viewController;
        photo.userArray = feed.userArray;
    }       
}

【讨论】:

  • 是的。它在 viewController 中传递。你是对的@Droppy
  • 那是我的第一次尝试。使用调试器,它会跳过第一个 if 语句,因为 viewController 类是 UINaviagtionController 类。
猜你喜欢
  • 1970-01-01
  • 2020-05-18
  • 2017-01-07
  • 2015-02-20
  • 1970-01-01
  • 2017-04-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多