gpt4 book ai didi

ios - 在 View 之间传递数据?

转载 作者:行者123 更新时间:2023-11-29 12:47:09 25 4
gpt4 key购买 nike

在不使用通知的情况下,将数据从一个 View 传递到另一个 View 以使用属性并将该属性分配给目标 View 的 viewDidLoad 中的某个 UI 元素的正确方法是否正确?

例如,如果我有一个单 View 应用程序,则有一个 mainView,它首先出现。我添加了另一个 ViewController (ViewTwo),它有一个标签。如果 mainView 试图在 prepareForSegue 中为这个标签分配一个字符串,那将会失败,因为标签没有被初始化。首先分配给 viewTwo 上的属性,然后分配给 viewDidLoad 中的 UI 元素。

此外,如何在不使用通知的情况下将数据从 viewTwo 返回到 mainView?

最佳答案

这可能有帮助:

How to pass prepareForSegue: an object

如果将对象传递给第二个 View ,第一个 View 也可以保留所有权并读取第二个 View 在第二个 View 消失后写的内容。

为了澄清(此代码来自上面的链接),想法是在 prepareForSegue 中,您将目标 View Controller 作为要使用的对象。例如:

// Get reference to the destination view controller
YourViewController *vc = [segue destinationViewController];

发生的事情是目标 View Controller 已被实例化。但是您在 pepareForSegue 中获得了第二个 View Controller ,然后它才出现。实际上 viewDidLoad 会在 prepareForSegue 之后被调用。这是一个有趣的链接:viewDidLoad called before prepareForSegue finishes (只是为了避免链接的标题误导,作者调和它没有在 prepareForSegue 之前调用 viewDidLoad)

因为 viewDidLoad 还没有被调用,但是 View 被初始化了,例如程序员可以在第二个 View 上填充作为实例变量的 NSString,并且在它可以使用的第二个 View 的 viewDidLoad 方法中这些字符串来设置它的标签。这是一个很好的引用 Passing Data between View Controllers

在此链接中还讨论了委托(delegate)和协议(protocol),它们是一个接口(interface),一个 View 可以通过该接口(interface)在另一个 View (实现协议(protocol))上调用带有参数( View 定义的协议(protocol)的一部分)的函数。

属性集可以是一个类的对象,也可以是在 viewA 和 viewB 上作为属性共享的对象,例如数组或自定义类的对象,其中 viewA 和 ViewB 上的属性可以指向相同的对象事情,在 ViewB 消失后,viewA 仍然可以使用数据。这也让你保持 viewB 的状态持久化,例如如果 viewB 上有游戏,你可以通过你保持持久化的数据重建它们在游戏中的位置,因为 viewA 的属性或聊天窗口可以打开在他们停止阅读的 viewB 上。

专门解决正确性(这是一个加载词)这是一种正确的做事方式,但设置属性的一个含义是您必须考虑内存。一个对象有多个引用,在ViewB没有了之后还在ViewA中保留引用,占用内存。例如,如果 viewA 拥有 viewB 上的所有内容,则可以保留 viewB 等的 subview ,内存开销会更高。如果 viewA 在游戏进行期间在 viewA 和 viewB 之间移动时持有游戏数据,但在游戏结束后不需要它,则应将其设置为 nil 以释放内存。

关于ios - 在 View 之间传递数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23409914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com