将数据传递到不同ViewControllers之间的数组

时间:2015-08-05 21:24:06

标签: ios delegates segue viewcontroller

我有两个名为viewController和secondViewController的viewcontrollers。我想获取数据并使用委托将其发送到secondViewController。另外我在secondViewController中有一个数组,当每个数据来自VC1时,它必须存储数据,如;

segue1,第一个数据来了 - > arrayElements {firstData} segue2,第二个数据来了 - > arrayElements {firstData,secondData}

但每次第二个ViewController进入屏幕时,它都会丢失以前的数据(来自先前segues的数据)。这是我的代码;

FirstViewController.h

@protocol CustomDelegate <NSObject>

-(void)passData: (NSString*)data_in;

@end

@interface FirstViewController : UIViewController

@property (strong, nonatomic) NSString *myData;
@property (nonatomic, weak)id<CustomDelegate>delegate;

@end

FirstViewController.m(我只复制了所需的部分)

- (IBAction)sendButton:(UIButton *)sender {

    SecondViewController *svc = [[SecondViewController alloc] init];
    self.delegate = svc;

    [self.delegate passData:self.myData];
}

SecondViewController.h

import things here..
@interface SecondViewController : UIViewController <CustomDelegate>

@property (strong, nonatomic) NSString *receivedData;
@property (strong, nonatomic) NSMutableArray* receivedDataArray;

@end

SecondViewController.m

//declerations, properties, lazy instantiation for array here

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:YES];

    self.receviedDataLabel.text = self.receivedData;


}


-(void)passData:(NSString *)data_in{

    self.receivedData = data_in;
    [self.receivedDataArray addObject:data_in];

}

这是视觉; http://i.hizliresim.com/ql8aJ3.png

正如我所说,每次单击show按钮进行segue时,我都丢失了ViewController2中以前的所有数据。

我之前读过这样的问题,但大多数问题只是传递一个数据。我很困惑。

如何使用代理存储这些数据,而不会丢失以前的代码。

2 个答案:

答案 0 :(得分:0)

你有一个导航控制器所以当你从firstViewController转向显示secondViewcontroller时,它会将secondViewcontroller推送到导航堆栈。 当点击后退按钮返回到firstViewController时,它会从导航堆栈弹出第二个ViewController,并且将被解除分配,因此之后不会有任何数据或视图。

答案 1 :(得分:0)

您的代码存在的问题是您每次都在SecondViewController操作中初始化新的sendButton

因此,每次点击sendButton时,svc.receivedData都是空的(新)数组

考虑将svc保留为局部变量,并且只调用init一次。

类似的东西:

FirstViewController.h中,添加以下行:

@property (strong, nonatomic) SecondViewController *svc;

这些行到FirstViewController.m

- (IBAction)sendButton:(UIButton *)sender {
    ...
    if(self.svc == nil){ 
        self.svc = [[SecondViewController alloc] init];
        self.delegate = self.svc;
    }
    ...
}