首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UserDefaults在sceneWillResignActive方法SceneDelegate.swift中的应用

UserDefaults在sceneWillResignActive方法SceneDelegate.swift中的应用
EN

Stack Overflow用户
提问于 2020-09-29 22:17:32
回答 1查看 441关注 0票数 0

我正在制作一个便笺应用程序,当应用程序处于背景状态或应用程序刚刚移动到后台时,它将保存用户默认数据。

这是ViewController.swift的代码

代码语言:javascript
复制
import UIKit
class ViewController: UIViewController {
    let defaults = UserDefaults.standard
    @IBOutlet weak var textField: UITextView!
    override func viewDidLoad() {
        super.viewDidLoad()
        if let item = defaults.string(forKey: "Notes") {
            textField.text = item
        }
    }
}

这是SceneDelegate.swift的代码

代码语言:javascript
复制
import UIKit
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?
    let vc = ViewController()
    let defaults = UserDefaults.standard
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let _ = (scene as? UIWindowScene) else { return }
    }
    func sceneDidDisconnect(_ scene: UIScene) {
    }
    func sceneDidBecomeActive(_ scene: UIScene) {
    }
    func sceneWillResignActive(_ scene: UIScene) {
        print("scene will resign active")
        defaults.set(vc.textField.text!, forKey: "Notes") /*error*/
        defaults.synchronize()
    }
    func sceneWillEnterForeground(_ scene: UIScene) {
    }
    func sceneDidEnterBackground(_ scene: UIScene) {
    }
}

我已经在@IBAction button上实现了同样的功能,而且它确实运行得很好。但是,当我在sceneWillResignActive()方法中保存默认数据时,它会显示此错误

/*错误-线程1:致命错误:在隐式展开可选值*/时意外找到零

如何在sceneWillResignActive()方法或任何其他场景方法中保存UserDefault数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-30 10:26:32

我所要做的不是使用UIWindowSceneDelegate,而是使用UITextViewDelegate Protocol。没有必要在SceneDelegate.swift,中更改任何代码,因为没有完全使用Scenes的实例。有必要在textViewField完成编辑后立即保存实例。

ViewController.swift

代码语言:javascript
复制
import UIKit

class ViewController: UIViewController, UITextViewDelegate {

@IBOutlet weak var textView: UITextView!

override func viewDidLoad() {
    super.viewDidLoad()
    textView.delegate = self
    textView.backgroundColor = .systemBlue
    
   
    if let item = UserDefaults.standard.string(forKey: "Notes") {
        textView.text! = item
    }

}

func textViewDidChange(_ textView: UITextView) {
    UserDefaults.standard.set(textView.text!, forKey: "Notes")
   }  
}

阅读UITextViewDelegate 这里的苹果文档。

您可以观看视频以供参考。谢谢!!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64128389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档