当前位置: 首页 > 知识库问答 >
问题:

在不同的ViewControllers之间向数组传递数据

宿景曜
2023-03-14

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

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

但是每次secondViewController进入屏幕时,它会丢失先前的数据(来自先前序列的数据)。这里是我的代码;

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个答案

邹宏峻
2023-03-14

您有一个导航控制器,因此当您从firstViewController中选择显示secondViewcontroller时,它会将secondViewcontroller推送到导航堆栈。当点击back按钮返回到firstViewController时,它从导航堆栈中弹出secondViewController并将被释放,这样之后就没有数据或视图了。

厍浩广
2023-03-14

您的代码的问题是,您每次都在SendButton操作中初始化一个新的SecondViewController

因此每次点击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;
    }
    ...
}
 类似资料:
  • 我想把我的数据传递给其他的viewcontroller,但我做不到。我的密码在下面。ViewControllers的屏幕截图在这里。当用户写出他们的名字和密码时,我想传递另一个用户的数据,但他们之间还有一个viewcontroller。我认为这是一个问题,但我可以移除这个额外的视图控制器,所以我想了解如何才能把这些数据传递给其他的一个? 第一个viewcontroller的代码 第二个viewco

  • 我正试图将数据从第一个ViewController发送到第二个ViewController。 然后我尝试将它发送到我的另一个ViewController: 致命错误:在展开可选值时意外发现nil 我的第二个视图控制器:

  • 我的应用程序包含5个ViewControllers的TabBar控制器可以单击每个viewcontrollers中的一个按钮,该按钮将弹出另一个视图,用户可以在其中选择一个设置。按钮(被点击)应该根据每个ViewController中选择的设置来改变其背景。因此,如果用户点击VC1中的按钮并选择设置,该信息应该传播到所有其他VC中,以便按钮具有相同的背景。 我正在使用故事板,我知道这很容易在2VC

  • 问题内容: 我在页面上有一个组件的两个实例(搜索字段),在它们之间有另一个组件(进行服务器调用的按钮),例如: 我要做的只是将一个未修改的参数从CardSearch字段传递到RunOnServer按钮,但是如果简单的话,我该死的。据此,我可以使用this.state.var作为道具,但是这样做可以在编译代码时给我’undefined.state.var’。React的官方文档并不出色。他们只是告诉

  • 问题内容: 我正在以这种方式制作包含3个子组件的组件: 主要组成部分包含英雄列表。标头组件包含两个按钮,用于将主组件上的视图切换到列表或网格视图。 我现在遇到的问题是将数据从标头组件传递到主组件。因此,当我单击网格按钮时,主要内容上的视图应更改为网格视图,与行视图相同。 如何在角度1.5的子组件之间传递数据? 问题答案: 成分法 我建议您与Angular 2组件方法保持一致,并使用输入 / 输出方

  • 本文向大家介绍vue.js组件之间传递数据的方法,包括了vue.js组件之间传递数据的方法的使用技巧和注意事项,需要的朋友参考一下 前言 组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。如何传递数据也成了组件的重要知识点之一。 组件 组件与组件之间,还存在着不同的关系。父子关系与兄弟关系(不是父子的都暂称为兄弟吧)。 父子组件 父子