我有两个名为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中以前的所有数据。
我之前读过这样的问题,但大多数问题只是传递一个数据。我很困惑。
如何使用代理存储这些数据,而不会丢失以前的代码。
答案 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;
}
...
}