您可能不想要 NSFetchedResultsController。结果控制器通常与 UITableViewController 一起用作辅助对象来填充表格。
如果这是您想要的,请继续。但是,如果您只想从核心数据上下文中获取实体,则只需要一个 NSFetchRequest。假设您有一个名为 Person 的核心数据对象。假设我们想要所有名为“Ryan”的实体
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
NSString *nameToGet = @"Ryan";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", nameToGet];
[fetch setPredicate:predicate];
NSError *error = nil;
NSArray *results = [[self managedObjectContext] executeFetchRequest:fetch error:&error];
if(results) {
NSLog(@"Entities with that name: %@", results);
for(Person *p in results) {
NSLog(@"person = %@", p);
}
return results;
} else {
NSLog(@"Error: %@", error);
}
return nil;
因此,您创建了一个获取请求。NSPredicate 类似于 SQL 语句的 where 条件。因此,您可以使用格式创建谓词(创建谓词有很多选项)。设置请求的谓词,然后告诉您的 managedObjectContext 执行获取请求。请求的任何结果都将在返回的数组中。数组中的每个对象都是 Person 类型的对象。
如果您正在寻找使用 NSFetchedResultsController,它基本上是同一类型的东西。但是,您使用 1 个不可变的获取请求创建控制器,因此它始终获取相同的数据。如果您想要不同的数据,则需要创建另一个控制器。如果您只使用 NSFetchRequests(我从 UI 中分离数据层,因此使用控制器对我来说不是很有用),您可以查询任何您想要的数据并返回结果。