【问题标题】:NSData or NSAttributedString with SBJSON带有 SBJSON 的 NSData 或 NSAttributedString
【发布时间】:2012-01-02 18:10:49
【问题描述】:

我在 iOS 应用程序中使用SBJSON 将我的 NSDictionary 转换为 JSON 字符串。

当我的字典包含 NSAttributedString 或 NSData 时,SBJSON 无法生成字符串表示。

如果是 NSAttributedString,错误是:

-JSONRepresentation 失败。错误跟踪是:( "Error Domain=org.brautaset.JSON.ErrorDomain Code=1 \"NSConcreteMutableAttributedString 不支持 JSON 序列化\

如果是 NSData,错误是:

-JSONRepresentation 失败。错误跟踪是:( “错误域 = org.brautaset.JSON.ErrorDomain 代码 = 1 \“NSConcreteMutableData 不支持 JSON 序列化\” UserInfo=0x7ed2560 {NSLocalizedDescription=JSON 序列化不 支持 NSConcreteMutableData}"

解决这两个问题中的至少一个是很重要的。 请帮忙。

谢谢 呸呸呸

【问题讨论】:

  • 您的 NSData 或 NSAttributedString 对象包含什么?是否可序列化为字符串?
  • NSAttributedString 是一个高度格式化的字符串。如中,文本在不同的索引处使用不同的属性进行格式化。 NSData 是 NSAttributedString 的数据表示。通过使用与link 中类似的代码获得数据表示
  • 请接受其中一个答案;它们看起来很合理。或提供其他信息,以便我们进一步帮助您。

标签: objective-c ios ios4 ios5 sbjson


【解决方案1】:

JSON 没有任何数据类型可以执行您想要的操作,但您可以将 NSData 转换为 Base64 编码的字符串。这可以通过实现 -proxyForJson 方法的 NSData 上的类别自动完成。问题是当您需要在另一端将其转换回 NSData 时。如果密钥是已知的,那么您只需 Base64 解码该密钥。但是如果数据部分可以用于任何键,那就有点困难了。您必须以某种方式构建数据,以便确定哪些字符串应该进行 Base64 解码。

【讨论】:

    【解决方案2】:

    你不能传递 NSData 对象。问题的解决方案是,只需使用以下行(更改对您的 nsdata 对象的响应)并将该字符串用作值。

    NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
    

    您也不能将 NSAttributedString 作为值传递。您必须将 NSAttributedString 更改为 NSString。请检查 OHAttributedLabel 库以获取更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      相关资源
      最近更新 更多