Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将数据从第三视图控制器传回第一视图控制器?_Ios_Swift - Fatal编程技术网

Ios 如何将数据从第三视图控制器传回第一视图控制器?

Ios 如何将数据从第三视图控制器传回第一视图控制器?,ios,swift,Ios,Swift,我目前有一个导航控制器,它包含一个视图控制器和两个表视图控制器。当用户导航到第二个表视图控制器时,他们可以按下“+”条按钮项,该按钮项以模式显示另一个带有包含文本字段的静态单元格的表视图。用户可以输入文本并按“完成”保存。调用my delegate方法时,视图控制器将被取消,用户输入的字符串将附加到第二个视图控制器中的数组中。然后,表格视图在表格单元格中显示用户输入的文本。数组已通过prepareforsgue方法向上传递到堆栈。这目前正在工作,因为我可以在表视图中看到数组在第一个视图控制器中实

我目前有一个导航控制器,它包含一个视图控制器和两个表视图控制器。当用户导航到第二个表视图控制器时,他们可以按下“+”条按钮项,该按钮项以模式显示另一个带有包含文本字段的静态单元格的表视图。用户可以输入文本并按“完成”保存。调用my delegate方法时,视图控制器将被取消,用户输入的字符串将附加到第二个视图控制器中的数组中。然后,表格视图在表格单元格中显示用户输入的文本。数组已通过
prepareforsgue
方法向上传递到堆栈。这目前正在工作,因为我可以在表视图中看到数组在第一个视图控制器中实例化时使用的字符串

当用户沿堆栈向下导航到第二个表视图之前的任何视图控制器时,就会出现我的问题。第二个表视图包含在单元格中显示的用户输入的字符串。显然,我已经成功地将数据传递给了以前的视图控制器,但是经过大量的研究和测试,我无法成功地让用户输入的字符串保持不变。当我导航到上一个视图控制器,然后返回第二个表视图时,用户输入的数据将消失,数组仅包含初始数据

我知道Swift中的数组是结构,在向上传递堆栈时会复制值。这就解释了当我导航到上一个视图控制器时,用户输入的数据消失的原因。以前的视图控制器实际上不包含用户输入的数据。这是否意味着我需要将字符串附加到初始视图控制器中的数组,而不是第二个表视图控制器中的数组?如果是这种情况,我不确定如何从第三个视图控制器访问初始视图控制器

我访问过的所有文档和教程都是基于将数据从当前视图控制器传递回上一个视图控制器的基础上的,上一个视图控制器是一个委托,然后该委托将取消接受输入的视图控制器


如何将用户输入的字符串从最后一个视图控制器传递回初始视图控制器?

创建一个负责维护数据模型的类。您可以将其设置为单例,也可以通过应用程序委托(或其他选项)使该类的对象可用。当控制器希望应用程序的其他部分可以使用信息时,它会将其发送到数据模型进行更新。当控制器想要显示信息时,它会从数据模型中获取信息


控制器之间不再存在必须确定要交换什么的数据依赖关系。

创建一个负责维护数据模型的类。您可以将其设置为单例,也可以通过应用程序委托(或其他选项)使该类的对象可用。当控制器希望应用程序的其他部分可以使用信息时,它会将其发送到数据模型进行更新。当控制器想要显示信息时,它会从数据模型中获取信息


控制器之间不再存在必须确定要交换什么的数据依赖关系。

创建一个负责维护数据模型的类。您可以将其设置为单例,也可以通过应用程序委托(或其他选项)使该类的对象可用。当控制器希望应用程序的其他部分可以使用信息时,它会将其发送到数据模型进行更新。当控制器想要显示信息时,它会从数据模型中获取信息


控制器之间不再存在必须确定要交换什么的数据依赖关系。

创建一个负责维护数据模型的类。您可以将其设置为单例,也可以通过应用程序委托(或其他选项)使该类的对象可用。当控制器希望应用程序的其他部分可以使用信息时,它会将其发送到数据模型进行更新。当控制器想要显示信息时,它会从数据模型中获取信息


控制器之间不再存在数据依赖关系,这些依赖关系必须确定要交换什么。

事实上,Objective C中有很多消息传递机制,除了Phillip的回答之外,我可以建议您使用
NSNotificationCenter
,您可以使用它发布通知并在需要时捕获它们。发布的通知可以具有自定义对象、案例中的字符串和名称,您应该为其添加观察者以接收该通知

注册特定通知:

[[NSNotificationCenter defaultCenter] addObserver:{object_to_handle_notification} selector:@selector(notificationReceived:) name:@"my_notification" object:nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"my_notification" object:userEnteredString];
- (void)notificationReceived:(NSNotification *)notification
{
    NSString *userEnteredString = notification.object;
    //do whatever you want with the user entered string
}
发布通知:

[[NSNotificationCenter defaultCenter] addObserver:{object_to_handle_notification} selector:@selector(notificationReceived:) name:@"my_notification" object:nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"my_notification" object:userEnteredString];
- (void)notificationReceived:(NSNotification *)notification
{
    NSString *userEnteredString = notification.object;
    //do whatever you want with the user entered string
}
处理通知:

[[NSNotificationCenter defaultCenter] addObserver:{object_to_handle_notification} selector:@selector(notificationReceived:) name:@"my_notification" object:nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"my_notification" object:userEnteredString];
- (void)notificationReceived:(NSNotification *)notification
{
    NSString *userEnteredString = notification.object;
    //do whatever you want with the user entered string
}
此外,完成后还应删除通知的观察者。
希望这是有帮助的。祝你好运

实际上,Objective C中有很多消息传递机制,除了Phillip的答案之外,我可以建议您使用
NSNotificationCenter
,您可以使用它发布通知,并在需要时捕获它们。发布的通知可以具有自定义对象、案例中的字符串和名称,您应该为其添加观察者以接收该通知

注册特定通知:

[[NSNotificationCenter defaultCenter] addObserver:{object_to_handle_notification} selector:@selector(notificationReceived:) name:@"my_notification" object:nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"my_notification" object:userEnteredString];
- (void)notificationReceived:(NSNotification *)notification
{
    NSString *userEnteredString = notification.object;
    //do whatever you want with the user entered string
}
发布通知:

[[NSNotificationCenter defaultCenter] addObserver:{object_to_handle_notification} selector:@selector(notificationReceived:) name:@"my_notification" object:nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"my_notification" object:userEnteredString];
- (void)notificationReceived:(NSNotification *)notification
{
    NSString *userEnteredString = notification.object;
    //do whatever you want with the user entered string
}
处理通知:

[[NSNotificationCenter defaultCenter] addObserver:{object_to_handle_notification} selector:@selector(notificationReceived:) name:@"my_notification" object:nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"my_notification" object:userEnteredString];
- (void)notificationReceived:(NSNotification *)notification
{
    NSString *userEnteredString = notification.object;
    //do whatever you want with the user entered string
}
此外,完成后还应删除通知的观察者。
希望这是有帮助的。祝你好运

实际上,Objective C中有很多消息传递机制,除了Phillip的答案之外,我可以建议您使用
NSNotificationCenter
,您可以使用它发布通知,并在需要时捕获它们。发布的通知可以有自定义对象、大小写中的字符串以及名称、fo