【发布时间】:2015-08-05 21:24:06
【问题描述】:
我有 2 个视图控制器,分别名为 viewController 和 secondViewController。我想获取数据并使用委托将其发送到 secondViewController。另外我在 secondViewController 中有一个数组,当每个数据来自 VC1 时,它必须存储类似的数据;
segue1,first data come -> arrayElements {firstData} segue2,第二个数据来了 -> arrayElements {firstData, secondData}
但是每次 secondViewController 进入屏幕时,它都会丢失以前的数据(来自以前的 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
正如我所说的,每次单击显示按钮进行转场时,我都丢失了 ViewController2 中所有以前的数据。
我读过以前的类似问题,但其中大多数只是传递一个数据。我很困惑。
如何使用委托存储这些数据而不会丢失以前的数据。
【问题讨论】:
-
因为每次执行 segue 时,它都是第二个视图控制器的全新对象实例。你知道类和类的实例的区别吗?
-
谢谢回复,是的,我知道,但是我怎样才能在不创建新实例的情况下传递数据呢?
-
您的第二个视图控制器可以将其数据保存在某处(例如 NSUserDefaults),然后每次创建它时,它都会在添加从第一个视图控制器传递给它的新数据之前读回之前存储的数据.但这很麻烦,现在可能是您评估您的设计是否应该有一个模型的时候了,它应该是存储和调解数据的模型。永久加载第二个视图控制器有点笨拙且效率低下。
标签: ios delegates segue viewcontroller