【发布时间】:2020-12-10 08:50:25
【问题描述】:
我有一个 textView,它是应用程序的整个屏幕。用户输入新文本,更改属性等。我希望应用程序下次保存 textview 内容及其属性。我想出了userDefaults。我尝试了很多,但没有任何反应。我找不到解决方案。我从 stackoverflow https://stackoverflow.com/a/36940864/12698480 尝试了这个解决方案,但没有改变。 textview 上再次出现空白屏幕。我作为 Userdefaults 扩展的代码如下:
//Save text
func setNSMutableText(string: NSMutableAttributedString?, forKey key: String){
var stringData: NSData?
if let string = string {
do {
stringData = try NSKeyedArchiver.archivedData(withRootObject: string, requiringSecureCoding: false) as NSData?
set(stringData, forKey: key)
print("archived NSMutableData")
} catch let err {
print("error archiving string data", err)
}
}
}
//LOAD text
func getNSMutableForKey(key: String) -> NSMutableAttributedString? {
var string: NSMutableAttributedString?
if let stringData = data(forKey: "screentextKey") {
do {
string = try NSKeyedUnarchiver.unarchivedObject(ofClass: NSMutableAttributedString.self, from: stringData)
print("UNARchived string data!!!")
} catch let err {
print("error extracting string data", err)
}
}
return string
}
用法:
//For saving
UserDefaults.standard.setNSMutableText(string: NSMutableAttributedString(attributedString: myTextView.attributedText), forKey: "screentextKey")
//For loading
override func viewDidLoad() {
super.viewDidLoad()
let oldstring = (UserDefaults.standard.getNSMutableForKey(key: "screentextKey"))!
myTextView.attributedText = oldstring
}
有什么问题?我看到有人建议在 NSMutableAttributedString 的地方使用 NSAttributedString。我也尝试过这种方式,但没有改变。
【问题讨论】:
-
控制台打印什么?什么时候调用 setNSMutableText?
-
不是问题,而是:您将密钥传递给“getNSMutableForKey”,但您没有使用它。
-
@Jordan 这是一个计算器应用程序。我在计算“=”符号处调用 setNSMutableText。我在控制台中看不到任何内容,因为在销毁应用程序后连接丢失。
-
@Jordan 我在 viewDidLoad 部分使用了带有 getNSMutableForKey 的密钥,可以在帖子中看到
-
当您执行
let oldstring = ...时,您可以打印它的值吗?之后是否会覆盖 myTextView 文本/attributedText?
标签: swift xcode userdefaults