工程日记之HelloSlide(3):如何使用Core Data数据库,以及和sqlite之间的对应关系
Core Data 和 SQLite 是什么关系
core data是对sqlite的封装,因为sqlite是c语言的api,然而有人也需要obj-c的api,所以有了core data ,另外,core data不仅仅是把c的api翻译成oc的api,还提供了一些管理的功能,使用更加方便。
1. App升级之后数据库字段或者表有更改会导致crash,CoreData的版本管理和数据迁移变得非常有用,手动写sql语句操作还是麻烦一些。
2. CoreData不光能操纵SQLite,CoreData和iCloud的结合也很好,如果有这方面需求的话优先考虑CoreData。
3. CoreData并不是直接操纵数据库,比如:使用CoreData时不能设置数据库的主键,目前仍需要手动操作。
4. core data还有其他sql所不具备的优点,比如对undo的支持,多个context实现sketchbook类似的功能。为ManagedObject优化的row cash等
5. 另外core data是支持多线程的,但需要thread confinement的方式实现,使用了多线程之后可以最大化的防止阻塞主线程。
6. 效率上其实比较不出来感觉,因为手机程序的数据库比较小。
与SQLite中的对应关系
表格结构 --> NSEntityDescription
数据库中所有表格和他们的联系 -->NSManagedObjectModel
数据库存放方式 --> NSPersistentStoreCoordinator
数据库操作 --> NSManagedObjectContext
查询语句 --> NSFetchRequest
表格的记录 --> NSManagedObject
NSEntityDescription
用来定义表格结构, 所以你就可以理解NSManagedObjectModel中的setEntities:(NSArray *)entities函数大概有什么用了 . 通常, 定义model, 是用文件CoreData.xcda*****odel, 可以图形化的操作. 这类似用nib来创建界面.
NSPersistentStoreCoordinator
这个类的对象通常用NSManagedObjectModel的对象来初始化, 这个类抽象出不同的存放方式, 最经常用的是NSSQLiteStoreType. 也就是一个负责把数据库存起来的引擎。
NSManagedObjectContext
这个类的对象又用NSPersistentStoreCoordinator的对象来初始化, 它里面有些方法来添加, 删除NSManagedObject
NSFetchRequest
通常用NSEntityDescription来构造查询, 也就指定查询那个表格, 另外可以指定排序.
怎么查看底层的Sqlite数据库
https://blog.csdn.net/xiliang_honst/article/details/7862153
func ifExists(instanceid id:Int)->Bool{
let app = UIApplication.shared.delegate as! AppDelegate
let context = app.persistentContainer.viewContext //声明数据的请求
let fetchRequest = NSFetchRequest<Composing>(entityName:"Composing")
//fetchRequest.fetchLimit = 10 //限定查询结果的数量
fetchRequest.fetchOffset = //查询的偏移量 //设置查询条件
let requestString:String = "composingid = \(id)"
let predicate = NSPredicate(format: requestString, "")
fetchRequest.predicate = predicate //查询操作
do {
let fetchedObjects = try context.fetch(fetchRequest)
if(fetchedObjects.count == ){
return false
}
else{
return true
} }
catch {
fatalError("查询失败:\(error)")
}
}
Core Data怎么支持多线程?
工程日记之HelloSlide(3):如何使用Core Data数据库,以及和sqlite之间的对应关系的更多相关文章
- 工程日记之HelloSlide(1):Swift自定义可视化组件的方法(继承UIView和在StoryBoard中设置)
需求描述 HelloSlide是把文本自动转化成幻灯片的软件,在幻灯片中我们有SmartArt:各种各样的几何形状,并且可以自定义大小和颜色,放在幻灯片不同的位置. 为了在我们的软件中实现类似的效果, ...
- 工程日记之HelloSlide(2) : UITextView中如何根据给定的长宽,计算最合适的字体大小
需求描述 一般的需求是将UITextview的大小自适应文本高度,会做出随文本内容增加,文字框不断增大的效果: 本文反其道而行之,在给定文字框大小的情况下:字数越多,字体越小: 需求来源: 考虑将文字 ...
- Core Data数据库迁移
一. Lightweight Migration i. 适合场景 Simple addition of a new attribute Removal of an attribute A non-op ...
- iOS Core Data 数据库的加密(待研究)
https://github.com/project-imas/encrypted-core-data 使用起来很方便,底层还是使用了SQLCipher,有时间要研究一下! 数据库的密码不能用固定字符 ...
- 【转】深受开发者喜爱的10大Core Data工具和开源库
http://www.cocoachina.com/ios/20150902/13304.html 在iOS和OSX应用程序中存储和查询数据,Core Data是一个很好的选择.它不仅可以减少内存使用 ...
- Core Data 教学
看了一篇国外的文章,关于iOS9的Core Data教学,在这里做了一下总结 Core Data 教学 示例开源地址:LastDayCoreData 在这篇文章中我们将学习Core Data的系列教程 ...
- Core Data-备用
Core Data是一个功能强大的层,位于SQLite数据库之上,它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互.Core Data将数据库行转换为OC对象(托管对象)来实现,这样无需 ...
- Core Data数据持久性存储基础教程-备用
摘要 就像我一直说的,Core Data是iOS编程,乃至Mac编程中使用持久性数据存储的最佳方式,本质上来说,Core Data使用的就是SQLite,但是通过一系列特性避免了使用SQL的一些列的麻 ...
- iOS数据持久化 -- Core Data-备用
Core Data是一个功能强大的层,位于SQLite数据库之上,它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互.Core Data将数据库行转换为OC对象(托管对象)来实现,这样无需 ...
随机推荐
- centos 7安装nodejs
ps: {install_path} 安装目录路径 1.安装wget yum install wget 2. 下载对应文件 wget -c https://nodejs.org/dist/v8.9.1 ...
- wx地址和腾讯地图
如果只是要获取当前用户的经纬度和打开微信自带的地图 只需要 jsApiList: ["getLocation","openLocation"] // 先获得 w ...
- Redis混合存储-冷热数据识别与交换
Redis混合存储产品是阿里云自主研发的完全兼容Redis协议和特性的混合存储产品. 通过将部分冷数据存储到磁盘,在保证绝大部分访问性能不下降的基础上,大大降低了用户成本并突破了内存对Redis单实例 ...
- flask邮箱注册问题
app/models.py self.confirmed = True db.session.add(self) db.session.commit() 这里的数据修改完后必须commit提交上去,不 ...
- javacv 通过rtsp 获取视频流 设置帧率
原文章:https://blog.csdn.net/eguid_1/article/details/52680802 原代码: /** * 按帧录制视频 * * @param inputFile-该地 ...
- node - 获取 token
String(req.headers.authorization || '').split(' ').pop()
- SharePreference的使用
SharePreference 一般用于保存偏好设置,比如说我们设置里的条目 sharepreference使用步骤 1.拿到sharepreference //拿到share preference ...
- django-ckeditor使用
django-ckeditor 1 安装 pip install ckeditor 2 配置 INSTALLED_APPS中添加 'ckeditor', 修改写入字段的格式 主题相关配置(settin ...
- MyBatis parameterType、resultType的数据类型
parameterType.resultType的数据类型要写全限定类名或者别名. mybatis已经给常用的数据类型起好了别名,参考mybatis.pdf 3.1.1小节: 基本数据类型很少用,一 ...
- 036-PHP闭包函数的域限制,与如何向闭包函数传递变量
<?php // 闭包函数的域限制,与如何向闭包函数传递变量 # 隐藏上面的代码,我们最后再来试下 function demo($ATxt) { $func = function () use ...