我有一个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];
我得到一个空对象。我不知道原因。 为什么呢?
非常感谢!
答案 0 :(得分:0)
您可以 a)将数据存储为BLOB
或 b)存储字符串的文本而不是实际的字符串。 B
似乎是一个更好的选择,因为您将存储更少的数据,并且如果您需要稍后进行调试的信息,那么数据库的内容将是人类可读的。
答案 1 :(得分:0)
因为NSData表示编码的UILabel而不是UTF-8编码的NSString,尝试从数据初始化UTF-8字符串几乎肯定不起作用。如果您必须将数据存储为字符串,请尝试使用某种形式的数据到字符串编码。尝试使用base32或base64。