【问题标题】:How can I save NSData to my database如何将 NSData 保存到我的数据库
【发布时间】:2011-04-11 12:45:52
【问题描述】:

我有一个 UILabel 的对象

UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
label1.text = @"LABEL AREA";

我想将它保存在我的数据库(sqlite)中。

我的想法是使用

将此对象转换为 NSData
[NSKeyedArchiver archivedDataWithRootObject:label1];               //step1

并将此 NSData 转换为 NSString(步骤 2),然后将该 NSString 保存到数据库(步骤 3)。

当我需要我的 UILabel 时。我可以从数据库中获取 NSString,将其转换为 NSData,然后使用

[NSKeyedUnarchiver unarchiveObjectWithData:];

获取我的 UILabel。

但我在“第 2 步”中遇到了问题。当我使用

NSString *strWithEncode = [[NSString alloc] initWithData:dataRaw encoding:NSUTF8StringEncoding];

我得到一个空对象。我不知道原因。 为什么?

非常感谢!

【问题讨论】:

  • 如果您的数据不是正确的字符串,那么很可能会失败。您使用的是什么类型的数据库,几乎都支持二进制数据,如果它肯定需要是字符串(例如 xml),那么使用 base64 编码。

标签: iphone objective-c


【解决方案1】:

您可以 a) 将数据存储为 BLOBb) 存储字符串的文本而不是实际的字符串。 B 似乎是一个更好的选择,因为您将存储更少的数据,并且数据库的内容将是人类可读的,如果您以后需要该信息进行调试。

【讨论】:

    【解决方案2】:

    因为 NSData 代表一个编码的 UILabel 而不是一个 UTF-8 编码的 NSString,所以尝试从数据中初始化一个 UTF-8 字符串几乎肯定不会奏效。如果您绝对必须将数据存储为字符串,请尝试使用某种形式的数据到字符串编码。尝试使用 base32 或 base64。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-25
      • 2016-03-28
      • 1970-01-01
      • 2012-05-19
      • 2020-12-12
      • 1970-01-01
      相关资源
      最近更新 更多