如果编码的字符串是NSBigMutableString

问题描述

我有一个应用程序,它从UITextView中获取用户输入的文本,并使用NSKeyedArchiver对其进行编码。该文本随后通过NSKeyedUnarchiver检索,该文本知道它包含给定密钥的值(containsValue(forKey:)返回true),但是在这种情况下无法对其进行解码。

我们注意到,检索来自UITextView且大于512个字符的存档字符串时出错。经过测试,我发现从'UITextView.text()'返回的字符串的类类型不再只是String,而是显示为类名=“ NSBigMutableString”。一旦发生这种情况,在对字符串进行编码后就会发生解码失败。

下面随附的是显示场景的单元测试。如果您没有通过UITextView传递测试字符串,则所有操作均按预期进行。一旦将其分配给TextView然后检索它,它现在就是NSBigMutableString。

func testArchiveUnarchiveFailure() throws {
    let testString = "Suspendisse potenti. Nam lobortis ornare augue,eu tempor dui suscipit dignissim. Quisque consequat fringilla velit,eget posuere nunc tristique sed. Cras ornare eleifend nulla vel lacinia. Curabitur ac libero sit amet sem laoreet pharetra. Nulla facilisi. Nam nec posuere ante.\nPellentesque consequat magna nec neque interdum,ut tincidunt erat dictum. Etiam vitae enim sit amet orci efficitur suscipit. Nulla facilisi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas."

    let textView = UITextView()
    textView.text = testString                      
    let bigString = textView.text! // Break here and inspect bigString to see it is now an NSBigMutableString
        
    let keyedArchiver = NSKeyedArchiver(requiringSecureCoding: true)        
    keyedArchiver.encode(bigString,forKey: "content")
    let data = keyedArchiver.encodedData
    
    let decoder = try! NSKeyedUnarchiver(forReadingFrom: data)
    let content = decoder.decodeObject(forKey: "content") as? String
    XCTAssertNotNil(content)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...