我的ViewController.swift是应用程序加载时第一个运行的。然后我转到另一个SecondViewController.swift文件。
ViewController.swift实例仍然存在,对吗?
现在,从SecondViewController.swift,我调用ViewController()。someFunction()
ViewController" viewDidLoad"没有被调用,只有我专门调用的函数。
现在:如果我在ViewController.swift中实例化一个Int变量" var testNum = 2"在ViewController的viewDidLoad中,我将其值更改为14.然后我转到SecondViewController。然后我调用ViewController()。someFunction()并在该函数中打印testNum的值,我得到的实例化值为2而不是ViewController的值为14,这让我相信我'通过以这种方式调用函数,我创建了一个新的ViewController副本。
是吗?那是我做过的吗?如果是这样,有没有办法在现有的ViewController中调用函数,而不是从SecondViewController.swift中创建一个新的ViewController?
谢谢!
答案 0 :(得分:1)
我的ViewController.swift是应用程序加载时第一个运行的。然后我转到另一个SecondViewController.swift文件。
挑剔:你不会在文件之间进行隔离,而是在这些文件中定义的类的实例之间进行区分。
ViewController.swift实例仍然存在,对吗?
是。好吧,该文件中定义的类的原始实例,见上文。
现在,从SecondViewController.swift,我调用ViewController()。someFunction()
ViewController" viewDidLoad"没有被调用,只有我专门调用的函数。
使用ViewController()
创建ViewController
类的新实例,然后直接在其上调用该方法。这并没有多大意义。
现在:如果我在ViewController.swift中实例化一个Int变量" var testNum = 2"在ViewController的viewDidLoad中,我将其值更改为14.然后我转到SecondViewController。然后我调用ViewController()。someFunction()并在该函数中打印testNum的值,得到实例化值2
当您调用ViewController()
时,您将创建ViewController.swift中定义的类的 new 实例。非常(非常)可能这不是你想要做的。
看来你宁愿挂在那个VC的原始实例上。所以你需要在做segue时转移它。
我确定你已经阅读了View Controller Programming Guide for iOS,对吧? ;-)这是一个相关的部分:
源视图控制器的prepareForSegue:sender:方法允许您将数据从源视图控制器传递到目标视图控制器。传递给方法的UIStoryboardSegue对象包含对目标视图控制器的引用以及其他与segue相关的信息。
通常你不想保留对原始视图控制器的引用,而是将相关数据传输到你所分割的VC中(以解耦它们)。
答案 1 :(得分:0)
如果您要存储值,我建议您创建一个模型类。
https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html
这将保持数据独立于控制器,因为要回答你的" ViewController.swift实例仍然存在,对吗?"问题,取决于记忆,它可能存在也可能不存在。这就是为什么创建一个模型是可取的,因为那时你并不担心它。
如果您喜欢示例,如果您使用谷歌MVC iOS,那么网上有很多。希望有所帮助。