我正在使用Xcode 8和swift 2.3
我想将整个视图控制器保存到文件并恢复状态,即使应用程序关闭后也是如此。 我到处搜索,发现我们需要使用编码器。但所有只是节目保存对象。 但在这里我需要保存整个ViewContoller和子视图。
ViewCotroller将有三个按钮
问题1)
可以保存self.view并自动保存所有子视图吗?
问题2)
我需要在开始时不使用编码器初始化,只需使用
name = input('Enter name: ')
# if you want to take spaces into account, i.e. inputs like
# 'Spam Eggs', change the following line to:
# while any(x for x in name.split() if not x.isalpha()):
while not name.isalpha():
print('Invalid input!')
name = input('Enter name: ')
with open(filename, 'a') as f:
f.write(name + '\n')
和
let nameVccVar = nameVcc()
问题3)
如何使用NSKeyedUnarchiver将所有这些编码数据保存到文件并检索回来?
请帮助我或给我提示让所有这些工作
let nameVccVar = nameVcc(coder: CodeVar)
我也累了:
class nameVcc: UIViewController
{
var nameIntVar = 0
var nameStringVar = "Save this"
var nameImageVar = UIImage()
override func viewDidLoad()
{
super.viewDidLoad()
}
required init?(coder NkdPsgVar: NSCoder)
{
super.init(coder: NkdPsgVar)
}
override func encodeWithCoder(DkdPsgVar: NSCoder)
{
}
func addTextViewBtnClick()
{
let viewVar = UIView()
// Set many values for view
self.view.addSubview(viewVar)
}
func addImageViewBtnClick()
{
let imgViewVar = UIImageView()
// Set many values for ImageView
self.view.addSubview(imgViewVar)
}
}
和
convenience init()
{
self.init()
}
答案 0 :(得分:5)
<强> TL; DR:强>
在您的应用中实施状态恢复需要一些关键步骤和方法。
true
这些方法shouldSaveApplicationState
和shouldRestoreApplicationState
来选择应用代表中的应用状态恢复。encodeRestorableStateWithCoder
和decodeRestorableStateWithCoder
方法。前者用于使用encodeObjectForKey
方法将视图控制器的任何状态信息保存到磁盘。后者将用于使用decodeObjectForKey
方法将状态从已保存的内容恢复到磁盘。观看这篇关于State Restoration的精彩博文,以便更轻松地掌握。如果你有时间,也要花钱观看State Restoration WWDC Session。
无需自行保存您的整个ViewController
。设置恢复标识符(在Interface Builder 中)时,UIKit
会为您执行此操作。我们唯一需要关注状态恢复的是保存重新创建应用“状态”所需的基本属性,例如Bool
确定是否要显示特定按钮的属性。
现在提出一系列问题......
我可以保存self.view并自动保存所有子视图吗?
您无需保存任何观看次数。所有子视图都将由UIKit
处理。对所需属性进行编码(例如 Bool 标记,计数变量,键属性,可用于从数据源的api调用中获取数据等) 。)在encodeRestorableStateWithCoder
方法内。不要忘记从decodeRestorableStateWithCoder
重新构建视图控制器的状态。这两种方法都适用于UIStateRestoring
协议。
我需要在开始时不使用编码器初始化,只需使用
无需做任何花哨的事情。
如何使用NSKeyedUnarchiver将所有这些编码数据保存到文件中 找回来?
正如我之前所说,实施必要的UIStateRestoring
协议方法来保存和恢复应用的状态。