NSFetchRequest

NSFetchRequest

获取数据的请求,通过被管理数据的上下文来执行查询,比如

NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

查询时,必须指定查询实体或实体名称,以 NSArray 形式返回查询结果,如果我们没有设置任何查询条件,则返回该 Entity 的所有数据对象。

我们可以使用谓词来设置查询条件,通常会将常用的 Fetch Requests 保存到 dictionary 以重复利用。

NSFetchRequest包括以下部分:

(1)实体(Entity)的名称

(2)NSPredicate谓词(搜索关键字或限定条件)

(3)排序方式(NSArray *)sortDescriptors

所有的被管理对象(managed object)都必须在上下文中注册,而通过NSFetchRequest获得的对象自动被注册。

如果在上下文中已经存在了要获取的对象,那么这个被管理NSManagedObject将被返回。否则上下文就会从相关的数据源中查找(也可能找不到)

例如,以下代码是查询在指定日期之后创建的ContactInfo,并将查询结果按照name排序

复制代码

NSManagedObjectContext * context  = [self managedObjectContext];

NSManagedObjectModel   * model    = [self managedObjectModel];

NSDictionary           * entities = [model entitiesByName];

NSEntityDescription    * entity   = [entities valueForKey:@"ContactInfo"];

 

NSPredicate * predicate;

predicate = [NSPredicate predicateWithFormat:@"creationDate > %@", date];

                         

NSSortDescriptor * sort = [[NSortDescriptor alloc] initWithKey:@"name"];

NSArray * sortDescriptors = [NSArray arrayWithObject: sort];

 

NSFetchRequest * fetch = [[NSFetchRequest alloc] init];

[fetch setEntity: entity];

[fetch setPredicate: predicate];

[fetch setSortDescriptors: sortDescriptors];

 

NSArray * results = [context executeFetchRequest:fetch error:nil];

[sort release];

[fetch release];

复制代码

常用方法:

-setEntity:设置你要查询的数据对象的类型(Entity)

-setPredicate:设置查询条件

-setFetchLimit:设置最大查询对象数目

-setSortDescriptors:设置查询结果的排序方法

-setAffectedStores:设置可以在哪些数据存储中查询

posted @ 2015-12-09 17:22  karling  阅读(755)  评论(0编辑  收藏  举报