如何将NSData保存到我的数据库中

时间:2011-04-11 12:45:52

标签: iphone objective-c

我有一个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];

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

非常感谢!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

因为NSData表示编码的UILabel而不是UTF-8编码的NSString,尝试从数据初始化UTF-8字符串几乎肯定不起作用。如果您必须将数据存储为字符串,请尝试使用某种形式的数据到字符串编码。尝试使用base32或base64。