数组 – 永久数据和准备争夺

数组 – 永久数据和准备争夺,第1张

概述我正在尝试一起使用永久数据和准备癫痫.这就是我目前所做的:(查看控制器1) override func viewDidAppear(_ animated: Bool) { let itemsObject = UserDefaults.standard.object(forKey: "items") if let tempItems = itemsObject as? [Str 我正在尝试一起使用永久数据和准备癫痫.这就是我目前所做的:(查看控制器1)

overrIDe func vIEwDIDAppear(_ animated: Bool) {    let itemsObject = UserDefaults.standard.object(forKey: "items")    if let tempItems = itemsObject as? [String] {        items = tempItems}

在(视图控制器2)中:

overrIDe func prepare(for segue: UIStoryboardSegue,sender: Any?) {    if segue.IDentifIEr == "toSecondVIEwController" {        let itemsObject = UserDefaults.standard.object(forKey: "items")        var items:[String]        if let tempItems = itemsObject as? [String] {            items = tempItems            items.append(textFIEld.text!)            print(items)        } else {            items = [textFIEld.text!]        }        UserDefaults.standard.set(items,forKey: "items")    }}

我试图在VC2上的数组中添加一个项目.然后我想将数组传输到VC1,同时也永久存储它.然后每次我关闭并重新加载应用程序时,我都可以打印数组.错误消息指出“使用未解析的标识符项”.我正在使用Xcode 8.0和Swift 3.0.

解决方法 好的,因为您说要在应用程序启动时保留数据,您将需要用户默认值来存储您的项目.正如Dan已经建议你基本上做得对.您只想设置之前未声明的变量.但我会在下面的代码中向您展示.我还将附加第二种方法,在执行segue时将项目传递给下一个视图控制器.

第一个例子:想象一下,我们在你的例子中有两个视图控制器.第一个视图控制器包含一个UITextFIEld来执行用户文本输入.每当我们在故事板segue的帮助下从第一个视图控制器切换到第二个视图控制器时(例如,当按下按钮时),我们从用户默认值中获取先前segue中的现有文本并添加当前用户输入然后再保留到用户默认值.这发生在第一个视图控制器中:

class VIEwController: UIVIEwController {@IBOutlet weak var textFIEld: UITextFIEld!overrIDe func prepare(for segue: UIStoryboardSegue,sender: Any?) {    super.prepare(for: segue,sender: sender)    if segue.IDentifIEr == "toSecondVIEwController" {        let itemsFromDefaults = UserDefaults.standard.object(forKey: "items")        var items: [String]        if let tempItems = itemsFromDefaults as? [String]        {            items = tempItems            items.append(textFIEld.text!)        }        else        {            items = [textFIEld.text!]        }        print(items)        UserDefaults.standard.set(items,forKey: "items")    }}}

第一个视图控制器看起来与您的代码非常相似,但我想添加它以保证完整性.

然后在第二个视图控制器中,我们只从用户默认值中获取项目,并将其直接存储在此视图控制器的实例变量中.借助于此,我们可以在视图控制器中的其他方法中执行我们想要的 *** 作,并进一步处理项目.正如我所说,你所缺少的是用于存储项目的实例变量声明.

class VIEwController2: UIVIEwController {private var items: [String]? // This is only accessible privatelyoverrIDe func vIEwDIDAppear(_ animated: Bool) {    super.vIEwDIDAppear(animated)    self.items = UserDefaults.standard.object(forKey: "items") as? [String]}}

第二个示例:您还可以在VIEwController2中声明一个内部/公共变量,以便您可以在执行segue中直接从第一个视图控制器设置它.您不需要从VIEwController2中的用户默认值中获取项目.为此,您可以访问segue的目标视图控制器,然后将其转换为VIEwController2并直接设置它的项目.

class VIEwController: UIVIEwController {@IBOutlet weak var textFIEld: UITextFIEld!overrIDe func prepare(for segue: UIStoryboardSegue,sender: sender)    if segue.IDentifIEr == "toSecondVIEwController" {        let itemsFromDefaults = UserDefaults.standard.object(forKey: "items")        var items: [String]        // [...] Do the stuff to get the items and add current input like before [...]        let destinationVIEwController = segue.destination as! VIEwController2        destinationVIEwController.items = items    }}}class VIEwController2: UIVIEwController {var items: [String]? // This is accessible from outsIDe NowoverrIDe func vIEwDIDAppear(_ animated: Bool) {    super.vIEwDIDAppear(animated)    print(items) // We can Now print this because it is set in prepareForSegue}}

我真的希望我可以帮助你并解释它是可以理解的.如果您有任何疑问,请随时发表评论.

总结

以上是内存溢出为你收集整理的数组 – 永久数据和准备争夺全部内容,希望文章能够帮你解决数组 – 永久数据和准备争夺所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1055635.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存