0

基本上,我有一个名为 Signal 的类。它继承自 NSObject。它有 2 个属性:

@property (strong, nonatomic) NSString *title;
@property BOOL *favoriteStatus;

我的应用程序是一个选项卡视图应用程序,它有 2 个主要部分,都包含 TableViewControllers。现在我要做的是显示第一个 TableViewController 中的所有对象,但只显示第二个中最喜欢的对象。因此,不是在两个 TableViewControllers 的实现中实例化所有对象,有什么方法可以在用户切换选项卡时将相同的数组传递给第二个视图控制器。

此外,是否有任何其他方式(不是核心数据)可以存储哪些对象是收藏夹,以便下次加载它们。

谢谢。

4

4 回答 4

1

比单例更正确,比子类更容易:

任何时候都可以通过self.tabBarController.childViewControllers属性获取兄弟viewControllers的引用。

因此,假设您在第一个选项卡中并且想要将数据传递给第二个选项卡控制器,您可以在第一个选项卡控制器的任何位置执行此操作:

MySecondController *secondController = [self.tabBarController.childViewControllers objectAtIndex:1]; //second tab has index 1 (begins in 0).
secondController.someProperty = self.someProperty 

如果您想在选择第二个选项卡时传递此数据,请实现该UITabBarControllerDelegate方法shouldSelectViewController:并将代码放入其中,如下所示:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
   MySecondController *secondController = [self.tabBarController.childViewControllers objectAtIndex:1]; //second tab has index 1 (begins in 0).
   if(viewController == secondController)
   {
      secondController.someProperty = self.someProperty 
   }
   return YES;
}

如果你想将数据传回第一个控制器,你显然可以在第二个控制器中做同样的事情。

于 2013-09-14T16:15:53.960 回答
1

而不是创建一个单例(只有当作为单例的对象真正代表一个实体时才应该这样做),我将子类化 tabbarcontroller 并在其中创建一个属性。这样,当数组发生变化时,tabbarcontroller 可以通过让 childViewController 实现 tabbar 定义的协议来告诉 childViewController。

于 2013-09-14T15:38:29.407 回答
0

将存储类创建为单例,例如 MyObjectsStore。在此类中设置您的对象并实现检索它们的方法。它应该如下所示:

[MyObjectStore sharedInstance].myObjects

在第一个和第二个控制器中使用它。

于 2013-09-14T15:32:02.667 回答
0

使用prepareForSegue第一个ViewController中的方法

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"yourSegueIdentifier"])
{
    NextViewController *nextViewController =
    segue.destinationViewController;
    nextViewController.delegate = self;
    nextViewController.yourArray = yourArray;
}
于 2013-09-14T15:43:46.087 回答