摘要:目录内包含了三个文件xxx.sqlite、xxx.sqlite-shm、xxx.sqlite-wal默认的日志模式为Write-Ahead Logging(WAL): 支持多个并发读取和一个并发写入。该模式下,提交事务时,保持xxx.sqlite文件不变,而将事务追加到同一目录下的xxx.sql...
阅读全文
摘要:持久化存储协调器会试着用新版的模板打开原来的持久化存储区,但是那是旧的模板,旧的格式,当然会出错。现在要做的就是迁移现有的持久化数据区,以便跟新模型匹配。 怎么进行迁移呢? 在什么时候进行迁移? 在向NSPersistentStoreCoordinator添加存储区的时候。 那么如何添加...
阅读全文
摘要:为了不像3.1那样崩溃,修改模型之前先创建新的模型版本。添加之后,会生成一个新的xcdatamodel文件,并且跟原来的内容完全一样,这有意思了,但是不要删除原来旧版的模型。旧的模型有助于把原来持久化存储区迁移到当前的模型版本。 修改程序:选中Model.xcdatamodeld点击Edito...
阅读全文
摘要:托管对象模型是会变好的,有时候变化的比较小,什么添加验证规则、修改默认值、修改获取请求模板等。但是设置到结构变化,如添加、删除字段时,需要先把持久化数据区迁移到新的模型版本才行。假如没有提供迁移数据所需的映射与设定,那么应用程序就会崩溃。 程序修改,以引发模型不兼容错误运行程序,确保创建了持久...
阅读全文
摘要:本章介绍如何添加模型版本及模型映射,演示几种迁移技术,供在升级模型时使用。3.1. 修改托管对象模型3.2. 添加模型版本3.3. 轻量级迁移方式3.4. 默认的迁移方式3.5. 通过迁移管理器来迁移数据
阅读全文
摘要:可以不用手动写谓词,用Xcode的Data Model Designer。只是要用到AND 、OR等逻辑组合时,还得用代码写谓词。 程序示例操作如下:选中Model.xcdatamodeld点击Editor > Add Fetch Request设置模板名字点击"+"号来配置 NSSor...
阅读全文
摘要:Core Data通过谓词(NSPredicate)来筛选,比如限定获取的数量等。谓词基本对存储区不敏感,但也有例外,比如:matches可用在 in-memory存储区,但是不能用在SQLite存储区。谓词是SQL里面的where子句。 在筛选的过程中,每个托管对象都会根据谓词求值,根据返回...
阅读全文
摘要:传递NSSortDescriptor给NSFetchRequest进行排序。示例如下,修改demo方法:NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; NSFe...
阅读全文
摘要:删除托管对象,只要调用托管对象上下文的deleteObject 或 deleteObjects就可以了。同样,真正的删除,要在调用save:之后。
阅读全文
摘要:用NSFetchRequest获取NSArray,里面都是托管对象。如果上下文里没有数据,就会从持久化存储区里获取。 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Item"]; NSAr...
阅读全文
摘要:到现在为止,还没有创建过托管对象,回顾了一下,只是创建了托管对象模型,持久化存储区,持久化存储协调器,托管对象上下文。 那么,现在就来创建托管对象吧。 使用NSEntityDescription 的 insertNewObjectForEntityForName来创建 - (void)de...
阅读全文
摘要:上一节已经插入了数据,非常好。但是,我得更进一步。要知道里面究竟发生了什么,持久化存储区的数据有什么变化,生成了哪些查询语句。每次运行程序时,是否重复插入了对象。 有一个调试选项可以提供足够的信息,开启SQL Debug模式:点击 Product > Scheme > Edit Scheme点...
阅读全文
摘要:该代码段我觉得没有太多东西- (void)applicationDidBecomeActive:(UIApplication *)application { [self cdh]; [self demo];}- (void)demo{ if (debug == 1) { ...
阅读全文
摘要:该选项的意思是,“用Scalar特性来表示原始数据类型”。什么意思,妈妈米呀,这是我学这门课程遇到的最难懂的概念。 scalar properties,是复数,也就是说是 “分等级的属性”。那么,大概意思就明了了,也就是说不同情况下是不一样的。不到没有选择,不会用对象类型的特性。这里要注意的就...
阅读全文
摘要:现在根据模型来创建NSManagedObject的子类。如果模型改变了,那就就重新生成这些文件。所以,不要在生成的文件里自定义方法,因为重新生成之后,这些修改就丢失了。假如确实需要重新生成自定义的方法,那么可以从中继承子类,或者是针对生成的文件创建类目。(是分类吧??) 创建NSManaged...
阅读全文
摘要:可供配置的选项根据属性类型的不同有所变化,并不是每一种属性都能配置下列选项Transient:勾选该选项,表示该属性不写入“持久化存储区”,这听起来很奇怪,但有时候,只需要把特性留在托管对象上下文就行了。Opitional:optional特性并不一定要有值。所有特性再刚创建的时候都是optio...
阅读全文
摘要:单精度浮点数与双精度浮点数:创建NSManagedObject紫雷师,如果实体中单精度或双精度浮点数类型,那么在子类里,相关特性的类型是NSNumber。小数:涉及货币时,建议设置为小数(decimal),精度高。特性类型为NSDecimalNumber,若要保留精度,只能使用NSDecimalNu...
阅读全文
摘要:Core Data 使用 “带符号的整数”,通常我们会选择Integer 32,如果不够,可以升级为Integer 64 (第3章),通过升级托管对象模型。 这三种类型对应的特性(Property)类型为NSNumber。
阅读全文
摘要:Entity 实体,就像是数据表的映射类。用实体就可以创建托管对象了。实体需要做的就是设置实体名称、实体属性及属性数据类型。还可以根据实体配置NSManagedObject的子类(可选),创建子类的好处是,可以在托管对象后面使用“点符号”(.)访问相关属性,令代码更易阅读。一个托管对象可以看成数...
阅读全文