简单的查询通过创建 NSFetchRequest
来从 CoreData 中取得数据。
下面展示四种查询数据的方式:
//1
let fetchRequest1 = NSFetchRequest()
let entity = NSEntityDescription.entityForName("Person", inManagedObjectContext: managedObjectContext)!
fetchRequest1.entity = entity
第一种方法通过默认初始化`NSFetchRequest`,从 managedContext 来创建 Person 类的 EntityDescription,然后设置fetchRequest的entity来完成。
//2
let fetchRequest2 = NSFetchRequest(entityName: "Person")
第二种方法可以在初始化NSFetchRequest的时候传入EntityName来完成,这是一种便捷的快速方法,在init的时候就制定了Entity。
“`swift
//3
let fetchRequest3 = managedObjectModel.fetchRequestTemplateForName(“peopleFR”)
第三种通过调用`managedObjectModel`的`.fetchRequestTemplateForName`方法来获取 NSFetchRequest。在Xcode的 Data Model Editor 界面中可以手动设置一些针对用户需求常用的fetch属性,可以使用这种方法来快速调用。
```swift
//4
let fetchRequest4 = managedObjectModel.fetchRequestFromTemplateWithName("peopleFR", substitutionVariables: ["NAME" :"Ray"])
第四种基于第三种,但是会在第三种的基础上使用substitutionVariables
进行再次的筛选。
在Editor上创建 Fetch Template
在 Data Model Editor 界面上长时间按住 Add Entity 的那个按钮,选择Add Fetch Request
。
之后如果是查询一个实体的全部数据,就吧下拉框选为目标查询的实体。
几个小点:
* 从 Editor 模板中取得 FetchRequest 的时候必须从 ManagedObjectModel 中取。
构建的 CoreDataStack 类中只应该有 ManagedContext 是 Public 的,其余的都应该是 Private。
NSManagedObjectModel.fetchRequestTemplateForName()
的参数必须跟 Editor 中的保持一致。
NSFetchRequest 神奇の存在
在 CoreData 框架中,NSFetchRequest 就像一把多功能的瑞士军刀,你可以批量获取数