Core Data by Tutorials
Chapter 1 - Your First Core Data App
Chapter 2 - NSManagedObject Subclasses
Chapter 3 - The Core Data Stack
Chapter 4 - Intermediate Fetching
Chapter 5 - NSFetchedResultsController
Chapter 6 - Versioning and Migration
Chapter 7 - Syncing with iCloud
Chapter 8 - Unit Testing
Chapter 9 - Measuring and Boosting Performance
Chapter 10 - Multiple Managed Object Contexts
http://chengway.in/post/categories/ji-zhu/core-data-by-tutorials-bi-ji
Chapter 3 - The Core Data Stack
1.日期
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .ShortStyle
dateFormatter.timeStyle = .MediumStyle
//相对时间
dateFormatter.doesRelativeDateFormatting = true
dateFormatter.locale = NSLocale(localeIdentifier: "zh_cn")
dateFormatter.stringFromDate(NSDate())
Core Data要正常运行,需要几个组件共同协作来完成,这些组件包括:
NSManagedObjectModel
NSPersistentStore
NSPersistentStoreCoordinator
NSManagedObjectContext
一、The managed object model
The NSManagedObjectModel 反映了APP中所有的对象类型在data model中所拥有的属性,以及对象之间的关系。作者还提到了我们用Xcode提供的visual editor创建/编辑了一个xcdatamodel file,然而真正在背后的是有一个叫momc的编译器(compiler),把model file编译后的结果放到momd文件夹下。Core Data可以很高效地在运行时使用momd文件夹里编译过的内容,来初始化一个NSManagedObjectModel实例。
二、The persistent store
Core Data提供了四种开箱即用的NSPersistentStore存储类型,三种原子型atomic的,一种非原子型non-atomic的
NSQLiteStoreType 依托SQLite数据库,也是唯一的非原子型的non-atomic
NSXMLStoreType 依托于XML文件,是原子型的atomic
NSBinaryStoreType 依托于二进制文件,是原子型的atomic
NSInMemoryStoreType 其实是存在于内存中的persistent store type,不算严格意义上的持久化存储,通常用来做单元测试和缓存。
三、The persistent store coordinator
NSPersistentStoreCoordinator可以看成是一座连接managed object model与persistent store的桥梁,他负责理解model,更好地来处理信息的存取。特别是有多个persistent stores时,persistent store coordinator相对managed context提供唯一的接口,保证了context与特定的persistent store交互。
四、The managed object context
context可以看做是内存中的scratchpad,来记录所有的managed object的行为,当然managed object所做的任何改变,在context没有save()之前,都是不会在数据库中生效的。
context的五个比较重要的特性:
①. The context 管理着对象们的生命周期,不管这些对象是create还是fetch到的,这种对生命周期的管理在faulting、inverse、relationship handling 和 validation时很有用。
②. A managed object不能脱离context而存在,他们是紧紧地绑在一起的。
③. contexts都很有领土意识👏,一旦一个managed object被归到某个context中去了,那么这个managed object在他整个生命周期内属于这个context了。
④. 一个应用可以使用多个context,大多非凡的Core Data应用都这么搞。
⑤. A context是非线程安全的,你最好不要跨线程去使用context,Apple提供了多种方式来在多线程中使用context,后面会讲到。