0

我创建了一个 CoreData 模型并定义了我的实体和属性。我还创建了一个符合<NSFetchedResultsControllerDelegate> 并添加以下对象的 NSObject 类(名为 dbInterface)

NSFetchedResultsController *fetchedResultsController;
NSManagedObjectContext *managedObjectContext;

这是我非常迷茫的地方。我现在如何继续从创建的 sqlite3 文件中获取数据?

我的查询(如果使用正确的术语)需要根据条件从我的一个实体中选择某些记录。我不知道如何在 CoreData 中编写查询或任何类似的内容。

4

1 回答 1

10

您可能不想要 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 中分离数据层,因此使用控制器对我来说不是很有用),您可以查询任何您想要的数据并返回结果。

于 2013-02-08T18:10:28.197 回答