【问题标题】:Convert NSString data from sqlite to NSArray将 NSString 数据从 sqlite 转换为 NSArray
【发布时间】:2013-10-24 06:50:00
【问题描述】:

情况是这样的。。

我在SQLite 表的一个字段中插入了整个NSArray,现在我检索数据,它变成了一个字符串。如何再次将其转换为NSArray

这是我NSArray插入SQLite的内容:

"<tbl_news:annyfksM8D:(null)> {\n    \"news_content\" = \"Lorem ipsum dolor sit\";\n    \"news_date\" = \"Sep 23, 2013\";\n    \"news_featuredimage\" = \"uploads/1373124691956-160x120.jpg\";\n    \"news_title\" = \"Lorem Ipsum2\";\n}",

    "<tbl_news:fEgOpdgflF:(null)> {\n    \"news_content\" = \"Lorem ipsum dolor sit.\";\n    \"news_date\" = \"Sep 23, 2013\";\n    \"news_featuredimage\" = \"uploads/2560x1440.jpg\";\n    \"news_title\" = \"Lorem Ipsum3\";\n}"

这是一个解析的数组。谁能知道我将如何将其转换为NSArray。我已经尝试过Convert NSString to NSArray,但我认为这样做并不能解决我的问题。

【问题讨论】:

  • 选择一个分隔符,在其上拆分字符串,然后将单个对象添加到您的数组中(可能更适合NSMutableArray),例如[yourArray addObject:yourObject]
  • 没有办法将该字符串可靠地转换回数组。看来您只是使用description 方法将数组转换为字符串以将其存储在SQLite 中,这不是一个好主意。您最好使用合适的格式,例如将数组转换为 JSON,然后再转换回数组。
  • 其实你插入的是一个NSDictionary的description。扔掉你所拥有的,做正确的事。

标签: ios objective-c sqlite nsstring nsarray


【解决方案1】:

不要将 NSArray 作为字符串存储到数据库中。将其转换为 NSData,将其存储为 blob,将其作为 NSData 检索回来,然后将其转换回 NSArray:

// Convert NSArray to NSData
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
...

// Store it as a blob in sqlite
sqlite3_bind_blob(insert_statement, 1, [data bytes], [data length], NULL);

...

// Get the bytes back fromthe database and convert it into an NSArray
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]

【讨论】:

  • 如果您花时间阅读我的答案,您会发现我并没有告诉您如何将字符串转换回数组。您当前正在存储数组的说明,它是一个字符串。我建议您改为将数组转换为 NSDATA,它可以存储为 BLOB、检索并转换回 NSARRAY。 @Hot Licks - 它实际上是一本字典这一事实并没有改变答案。只要内容是基本类型或实现了encodeWithCoder,字典仍然可以转换为NSData。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多