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



我陷入了这个问题。我有一个故事板,里面有几个视图控制器。

我需要做的是:我需要将一个数组从FirstViewController传递到SecondViewController(它们不是邻居,也不是通过segue连接的),PikerView将在那里上传数组。之后,所选取的结果应传递给ThirdViewController。我有选项卡应用程序,其中FirstViewControllerSecondViewControllers连接到选项卡栏视图控制器,ThirdViewController通过Push Segue连接到SecondViewController

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

类别支出ViewController.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

类别支出ViewController.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]);
}

我想你需要这个

使用你的Push Segue。

segue.sourceViewController(或自身)将指向SecondViewControllersegue.sourceViewController.tabBarController将指向选项卡栏控制器。

从选项卡栏控制器中,您将找到您的FirstViewController

我想你已经解决了这个问题,但我发布这个只是为了记录:

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

包装商h:

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

包装机.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中相同的数组。

你想过NSUserDefault吗?试试看,你也可以在AppDelegate类中创建一个实例全局变量,并通过在任何其他ViewController中创建AppDelegate实例来访问它,但我认为NSUserDefault是最好的选择。

最新更新