将 NSMutable 数组存储到 sqlite 数据库中
Posted
技术标签:
【中文标题】将 NSMutable 数组存储到 sqlite 数据库中【英文标题】:Store NSMutable Array into sqlite database 【发布时间】:2011-03-22 13:13:59 【问题描述】:嗨 我正在编写一个 iphone 应用程序,需要一些帮助.. 我有这个 uitableview,它显示包含在 nsmutable 数组中的数据。这些数据是通过一些操作检索的,因此每次的数据量都不相同......
我想知道我是否有类似的东西:
NSMutableArray *mArray;
我将如何从 sqlite 数据库中存储和加载“mArray”..
根据要求提供更多信息:
@Caleb
@西边
数组内容: 数组的内容是简单的模块名称(即学生在课程中学习的科目),它们是通过一些解析操作从 .ics 日历文件中检索出来的。我最终得到一个包含我想要的数据的数组,然后我使用 tableview 显示它..
基本上我需要最初保存存储在数组中的模块名称,以便下次用户打开应用程序时,模块名称仍然存在..
为什么选择核心数据 当用户在 tableview 中选择一个单元格(即选择一个模块)时,我想推送另一个显示模块名称的视图控制器,用户可以在其中添加应保存的其他数据/字符串..
【问题讨论】:
查看存档和序列化 developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/… 。看看这是否有帮助,您很可能需要将内容作为数据存储在 NSUserDefaults 或文件系统中以使事情变得更容易。 我将如何使用 NSUserDefaults? 我更改了上面评论中的链接,以概述归档和序列化。这是指向NSUserDefault
s developer.apple.com/library/mac/#documentation/Cocoa/Reference/… 的链接。有数组方法来存储值。
【参考方案1】:
数组中的对象是什么?它们都是同一类型吗?如果它们是字典,它们是否都具有相同的键?它们是否由标准属性列表对象(NSDictionary、NSData、NSArray、NSString、NSNumber)组成?为什么要使用 SQLite 数据库而不是以其他方式保存它们?
如果你有一个自定义对象数组,最简单的做法是在数组中使用的类(或多个类)中实现 NSCoding。然后,创建一个 NSKeyedArchiver 并使用 -archiveRootObject:toFile: 归档您的数组。
【讨论】:
+1 用于提出我会问的所有问题 ;) 最大的两个问题是:您的对象是什么样的?为什么是核心数据(你是要重复使用存储的数据还是在每次应用运行时重新获取)? @westsider 很抱歉回复得太晚了。我已经更新了我的问题,如果你可以向上滚动到它,因为它有点太大了,无法发表评论。谢谢你的回复 :) 阅读了您更新的问题后,我要指出,您的模块数组仍然可以是一个相当简单的字典数组,可以通过存档甚至序列化到属性列表来保存。我非常喜欢 Core Data,但它可能超出您的需要或准备就绪。【参考方案2】:只要数组中的所有内容都符合NSCoding
,您就可以序列化您的数组。
查看 Archives and Serialization Programming Guide 以创建和解码档案。
你需要在你的 sqlite 表中有一个数据类型为 blob 的列,并使用 sqlite3_bind_blob 来存储它。
此链接显示如何从对象创建存档。 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Archiving/Articles/creating.html#//apple_ref/doc/uid/20000949-BABGBHCA
这篇文章展示了如何从 sqlite 数据库中检索 blob。 retrive-nsdata-from-sqlite-stored-in-blob-data-type-for-iphone-app
【讨论】:
以上是关于将 NSMutable 数组存储到 sqlite 数据库中的主要内容,如果未能解决你的问题,请参考以下文章
如何将 NSMutable 数组中的数据存储在 Core Data 中?
NSUserDefaults NSMutable 数组未在会话之间保存