iphone中 CoreData 框架的简单解释

[http://www.cnblogs.com/andhm/archive/2011/05/06/2038750.html]


并非严格的说, CoreData是对sqlite数据库的一个封装.

sqlite数据库操作的基本流程是, 创建数据库, 再通过定义一些字段来定义表格结构, 可以利用sql语句向表格中插入记录, 删除记录, 修改记录, 表格之间也可以建立联系.

这个过程出现了, 表格的结构(schema), 所有表格的结构和相互联系构成整个数据库的模型, 数据库存放的方式(可以是文件或者在内存), 数据库操作, sql语句(主要是查询), 表格里面的记录

下面将上面说的文字, 跟CoreData的类作个对应:

表格结构    --> NSEntityDescription
数据库中所有表格和他们的联系 -->NSManagedObjectModel
数据库存放方式 --> NSPersistentStoreCoordinator
数据库操作 --> NSManagedObjectContext
查询语句 --> NSFetchRequest
表格的记录 --> NSManagedObject

可能上面的对应关系并非十分严格, 但确实可以帮助理解.

下面再看看CoreData的类
NSEntityDescription
NSManagedObjectModel

NSEntityDescription用来定义表格结构, 所以你就可以理解NSManagedObjectModel中的setEntities:(NSArray *)entities函数大概有什么用了 . 通常, 定义model, 是用文件CoreData.xcdatamodel, 可以图形化的操作. 这类似用nib来创建界面. 

建个工程, 使用coredata, 模拟器运行之后, 程序对应的document目录出现一个CoreData.sqlite. 可以利用sqlite3命令来查看里面的表格结构
用命令行sqlite3 CoreData.sqlite 进入
>.tables
ZEVENT        Z_METADATA    Z_PRIMARYKEY
可以看到有表格ZEVENT, 对应的CoreData.xcdatamodel文件有名字叫Event的Entity

>.schema ZEVENT
CREATE TABLE ZEVENT ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZTIMESTAMP TIMESTAMP );
对应的Event中有属性timeStamp, 可以看到, 相应的ZEVENT表格中有字段TIMESTAMP

> select * from ZEVENT
1|1|1|306295807.974966
2|1|1|306295810.981875
3|1|1|306295811.982537
这表格有三个记录, 可以用来初始化三个NSManagedObject, 修改了NSManagedObject, save之后也修改了表格记录

你可以在CoreData.xcdatamodel添加新的entity, 之后用sqlit3命令来查看数据库的变化

NSPersistentStoreCoordinator
这个类的对象通常用NSManagedObjectModel的对象来初始化, 这个类抽象出不同的存放方式, 最经常用的是NSSQLiteStoreType. 

NSManagedObjectContext
这个类的对象又用NSPersistentStoreCoordinator的对象来初始化, 它里面有些方法来添加, 删除NSManagedObject

NSFetchRequest
通常用NSEntityDescription来构造查询, 也就指定查询那个表格, 另外可以指定排序.

在CoreData的设计中, 下一层有相应的属性指向上一层, 所以NSManagedObject有属性得到NSEntityDescription, NSEntityDescription有属性得到NSManagedObjectModel.

至于类
NSFetchedResultsController, 只是又封了一下, 和NSFetchRequest合起来使用, 方便取数据, 另外和NSManagedObjectContext关联, 当数据库发生变化的时候收到通知.

这文章只初步梳理了一下CoreData各类的关系, 各类的方法还需要一一研究. 文章最开始说CoreData是对sqlite数据库的一个封装, 不是严格的, CoreData不一定用sqlit来实现, 但他们之间确实有种对应关系.
本博客迁往 http://huangmin.sinaapp.com/ 敬请移步

资源下载链接为: https://pan.quark.cn/s/7cc20f916fe3 以下是对“js做的期末项目”的介绍:这是一个以童话为主题的前端开发作品,通过一系列功能实现,打造出了一个互动性强且视觉效果吸引人的用户界面,充分展现了作者对JavaScript语言的掌握程度。在项目中,作者运用了诸多JavaScript知识点。首先是DOM操作,JavaScript与HTML文档对象模型(DOM)紧密相连,可动态地创建、修改或删除页面元素,像document.getElementById()、document.querySelector()或document.querySelectorAll()等方法,就可能被用于选择和操作DOM节点。其次,为实现用户交互,例如轮播图切换等功能,addEventListener()函数被用来添加事件监听器,涵盖点击、滑动等事件,事件处理函数则依据用户行为执行相应逻辑。再者,JavaScript能够改变元素的CSS样式,通过element.style.property = value的方式,实现诸如轮播图过渡动画、照片墙图片淡入淡出等动态效果。在处理照片墙等涉及集合数据的场景时,数组的遍历方法,如forEach()、for...of循环或map()等,可能会被用到,以便显示或操作多个元素。闭包(Closure)在项目中也发挥了作用,它常用于封装私有变量和函数,保障数据安全,同时实现一些特定功能,像计时器控制等。为了实现自动轮播等功能,setTimeout()或setInterval()函数被用来定期执行任务,比如切换图片。在控制程序流程方面,if...else、switch语句以及逻辑运算符&&、||、!不可或缺,它们依据条件执行不同的代码块。函数是JavaScript的重要组成部分,项目中可能定义了多个函数,包括初始化页面、处理用户输入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值