我对编程很新,但此刻。我可以在第二个屏幕上查看我的堆栈中的计算。一旦应用程序项目重置,堆栈就很清楚了。我的问题是,一旦应用程序退出,我如何在第二个视图中保持堆栈。
class ViewController: UIViewController {
var name = Array<String>()
@IBOutlet weak var labelDisplay: UILabel!
var calcEngine : CalculatorEngine?
override func prepareForSegue(segue: UIStoryboardSegue,
sender: AnyObject?) {
if segue.identifier == "pushToNextView"
{
let secondVC: SecondVCViewController = segue.destinationViewController as! SecondVCViewController
secondVC.data = self.name
}
}
第二种观点
class SecondVCViewController: UIViewController {
@IBOutlet weak var textData: UITextView!
var data = Array <String>()
override func viewDidLoad() {
super.viewDidLoad()
for(var i = 0; i < self.data.endIndex; i++ ){
self.textData.text = self.textData.text! + self.data[i] + "\n"
}
// Do any additional setup after loading the view.
}
答案 0 :(得分:1)
您可以使用许多工具来保存应用中的数据。选择合适的一个需要了解您的需求,或至少做出猜测。这是我要开始的地方,但请注意我的假设与您的需求不符。
您希望保留哪种类型的数据?
据推测,您希望存储var name = Array<String>()
中看到的字符串数组,但也许您还有其他一些数据类型。
你什么时候需要读/写它(你需要担心多个系统同时尝试写入,加载数据会非常昂贵,因为它非常大,你是否只有需要一次加载一小块,...)?
听起来您可以一次性读取/写入所有数据,并且只能在应用启动/终止时使用。此计算历史记录的最大大小可能合理,总存储大小可能相当小。
需要持续多长时间?
计算历史通常很好,但如果失踪则不会造成灾难性的损失。保留这些数据会很好,但应用程序可以在没有它的情况下运行。根据使用情况,如果意外删除数据,则可能会花费或不会花费用户时间和挫败感。
谁需要访问它(它是否也显示在网站上,是否应该同步到用户的所有设备,......)?
将这段历史记录保存在本地设备上可能已经足够了。
那我们该怎么办?
对于一次性加载的少量数据,仅在本地使用,我会将此数据写入文件。
由于您只是处理一组字符串,我们可以使用plist(https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/PropertyLists/AboutPropertyLists/AboutPropertyLists.html)
NSArray(注意:不是Swift数组)有arrayWithContentsOfURL:
和writeToURL:atomically:
,这是读取和写入plist兼容数据的便捷方式。
使用文件意味着我们需要决定存储此文件的位置。看看Where You Should Put Your App’s Files。在这种情况下,将此数据写入Documents
或Library/Caches
似乎是合理的,具体取决于您打算如何使用它。
有了这些,我们可以保存这个堆栈:
let array = names as NSArray
guard let cachesURL = NSFileManager.defaultManager().URLsForDirectory(.CachesDirectory, inDomains: .UserDomainMask).first else {
print("Unable to find Caches directory, cannot save file.")
return
}
let fileURL = cachesURL.URLByAppendingPathComponent("history.plist")
array.writeToURL(fileURL, atomically: false)
阅读文件类似。您将需要相同的URL,因此决定哪个组件负责决定保存/加载此数据的位置,并让它提供要使用的URL。您还需要检查是否存在任何已保存的历史记录(请注意arrayWithContentsOfURL:
可以返回nil)。
在某些时候,您可能会发现将此数据建模为更具体的数据类型很有用,可能会定义您自己的结构来捕获这些操作。自定义类型无法自动写入文件或从文件中读取,因此您需要再做一些工作。 Apple有一个很好的例子,说明如何使用NSCoding在他们的教程中执行此操作:https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson10.html
答案 1 :(得分:0)
您正在寻找的功能称为状态恢复。来自docs:
状态保存会先记录您应用的配置 暂停,以便后续配置可以恢复 应用程序启动。
如何解决这个问题:
主题非常广泛但docs解释得非常好。
答案 2 :(得分:-1)
您尝试做的是在应用程序启动之间保留持久数据,对吗?
为此您应该使用核心数据,网上有许多有用的资源可以帮助您,还有一些有用的资源。
https://developer.apple.com/library/watchos/documentation/Cocoa/Conceptual/CoreData/index.html https://www.raywenderlich.com/934/core-data-tutorial-for-ios-getting-started