【问题标题】:Create an NSData object from a String从字符串创建一个 NSData 对象
【发布时间】:2015-10-14 12:27:53
【问题描述】:

我的应用需要能够获取String 并将其作为NSData 对象保存到NSDictionary,这样当NSDictionary 写入.plist 文件时,生成的文件将包含数据作为<data>The String as the user typed it (no encoding)</data>。有没有办法在不手动为.plist 文件编写 XML 的情况下做到这一点?

提前感谢您的帮助。

【问题讨论】:

  • 正如我在问题中所说,我不想对字符串进行编码。
  • @thefredelement 我想要的是相当于"<data>\(myTextView.text)</data>,但无需手动编写XML。

标签: string swift nsstring plist nsdata


【解决方案1】:

没有办法做你想做的事。

首先,声称您不希望对字符串进行编码是没有意义的。编码是从字符串生成字节流的过程。没有编码,就没有字符串的表示。字符串是抽象的。它们本身并没有具体的代表。只有编码会产生这种情况。

无论如何,NSData 对象不是这样序列化为属性列表文件的。即使您手动编写该文件,它也不会是一个正确的属性列表文件,并且没有其他属性列表读取程序能够解析它。您是如何得出您的应用需要这种能力的结论的?

【讨论】:

  • 为了回答您关于我如何得出我的应用需要此功能的结论的问题,我的应用是一个属性列表编辑器。我想要的是相当于"<data>\(myTextView.text)</data>,但无需手动编写XML。只是为了确定,你是说这是不可能的吗? (我不确定我最初的问题是否完全清楚。)
  • 可以写任何你喜欢的文件内容,但你描述的不是任何其他应用程序都可以解析的plist文件。属性列表 XML 模式的 data 元素是 Base64 编码的字节流。如果其他一些 plist-reading 应用程序尝试读取您的格式,它会尝试对纯文本进行 Base64 解码,并在最好的情况下得到错误,或者在最坏的情况下得到乱码数据。除此之外,无论如何,myTextView.text 可能只是插入 XML 无效。如果你正在编写一个属性列表编辑器,你应该使用NSPropertyListSerialization 来序列化对象。
  • 我的意图是有一个UITextView,用户可以在其中输入预Base64编码的文本。将数据对象排除在外似乎更有意义,因为它们可能(几乎)从未手动编写。
  • 如果您的用户真的对输入数据对象感兴趣,您可以构建各种接口机制。让他们选择一个文件。让他们以其他形式(纯文本、图像、颜色选择器等)输入数据并指定适当的转换。添加一个十六进制编辑器界面什么的。如果您要让他们将 Base64 编码的数据作为文本输入,那么您的程序应该对其进行解码,将生成的字节流存储在 NSData 中,将其放入对象层次结构中,然后像往常一样将其序列化到 plist 中。
猜你喜欢
  • 1970-01-01
  • 2011-08-25
  • 2023-03-22
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多