Swift-如何编码超过512个字符串?

时间:2018-10-13 16:26:43

标签: arrays swift string nsuserdefaults

在我的App中,我想存储一个自定义类UserSavedTextElement的数组。效果很好,但是当我想要存储包含超过512个字符的字符串时,应用程序崩溃并显示错误:

  

线程1:致命错误:在展开可选值时意外发现nil

我的自定义类:

import Foundation


class UserSavedTextElement: NSObject, NSSecureCoding {

static var supportsSecureCoding: Bool = true

   func encode(with aCoder: NSCoder) {
       aCoder.encode(title, forKey: "title")
       aCoder.encode(text, forKey: "text")
   }

   var title: String
   var text: String

   init(newTitle: String, newText: String){
       self.title = newTitle
       self.text = newText
   }

   required init(coder aDecoder: NSCoder) {
       self.title = aDecoder.decodeObject(forKey: "title") as! String
       self.text = aDecoder.decodeObject(forKey: "text") as! String
   }

}

要保存数组,请使用:

    do{
        let textData = try NSKeyedArchiver.archivedData(withRootObject: textArray, requiringSecureCoding: true)
        UserDefaults.standard.set(textData, forKey: "spokenTextHistory")
        print("saved")
    }catch{
        print("not saved")
    }

当字符串包含的字符数超过512个时,也会打印:“保存”

我要加载数组的代码(AppDelegate-didFinishLaunchingWithOptions):

    let textData = UserDefaults.standard.object(forKey: "spokenTextHistory") as? NSData

    if let textData = textData {
        do{
            let textDataArray = try NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSArray.self, UserSavedTextElement.self], from: textData as Data) as? [UserSavedTextElement]
            if let textDataArray1 = textDataArray {
                textArray = textDataArray1
            }
        }catch{
            print(error)
        }
    }

它压在这行上:

self.text = aDecoder.decodeObject(forKey: "text") as! String

应在其中保存数据的数组声明如下:

var textArray:[UserSavedTextElement] = []

如果它很重要:应该保存的字符串来自UITextView

如何保存超过512个字符?

0 个答案:

没有答案