如何在Storyboard中的非邻居视图控制器之间传递数据

时间:2013-09-03 12:16:18

标签: iphone ios objective-c xcode

我遇到了问题。 我有一个带有几个视图控制器的故事板。

我需要做的是: 我需要将一个数组从FirstViewController传递给SecondViewController(它们不是邻居,并且不通过segue连接)PikerView将上传数组。之后,挑选的结果应传递给ThirdViewController。 我有标签应用,其中FirstViewControllerSecondViewControllers连接到标签栏视图控制器,ThirdViewController通过推送搜索与SecondViewController连接。

了解我如何尝试将数据从第一个传递到第二个

CategoryExpencesViewController.h

#import <UIKit/UIKit.h>
#import "AddCategoryViewController.h"
#import "CategoryPickerViewController.h"
@interface CategoryExpencesViewController : UITableViewController         <AddCategoryViewControllerDelegate>
@property(nonatomic, weak) IBOutlet UIBarButtonItem *editButton;
@property(nonatomic, strong) NSMutableArray *categories; //list of category items
@property(nonatomic, strong) NSMutableArray *listOfCategories; //list of category names

CategoryExpencesViewController.m

-(void)updateArray
{
CategoryPickerViewController *controller = [[CategoryPickerViewController alloc]init];
controller.categoryList = [[NSMutableArray alloc]init];
controller.categoryList = listOfCategories;
NSLog(@"%d", [listOfCategories count]);
NSLog(@"%d", [controller.categoryList count]);

}

3 个答案:

答案 0 :(得分:0)

我认为你需要this

使用你的Push Segue。

segue.sourceViewController(或自我)将指向SecondViewControllersegue.sourceViewController.tabBarController将指向标签栏控制器。

从标签栏控制器中,您会找到FirstViewController

答案 1 :(得分:0)

我想你会解决它,但我发布这个只是为了记录:

将数组包装到一个类中,并使其具有静态构造方法:

Wrapper.h:

    @property (nonatomic, strong) NSMutableArray* array;
    +(Wrapper*)createArray;

Wrapper.m:

    +(Wrapper*)createArray{
        static Wrapper* instance = nil;
        if (instance == nil) {
            instance = [[Wrapper alloc] init];
            //Your initialization code for the array
        }
        return instance;
    }

然后,在你的FirstViewController中:

    -(void)updateArray{
        CategoryPickerViewController *controller = [[CategoryPickerViewController alloc]init];
        controller.categoryList = [[NSMutableArray alloc]init];
        controller.categoryList = [[Wrapper createArray] array];
        NSLog(@"%d", [listOfCategories count]);
        NSLog(@"%d", [controller.categoryList count]);

    }

由于这是对Wrapper的第一次调用,因此生成了数组。 然后在你的SecondViewController中,当你打电话:

    secondView.categoryList = [[Wrapper createArray] array];

并获得与FirstViewcontroller中相同的数组。

答案 2 :(得分:-2)

您是否想过NSUserDefault尝试它并且您还可以在AppDelegate类中创建实例全局变量并通过在任何其他ViewController中创建AppDelegate实例来访问它,但我认为NSUserDefault是所有人的最佳选择。