CoreData查询

jac*_*rge 1 iphone xcode core-data objective-c ios

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

NSFetchedResultsController *fetchedResultsController;
NSManagedObjectContext *managedObjectContext;
Run Code Online (Sandbox Code Playgroud)

这是我迷失的地方.我现在如何从创建的sqlite3文件中获取数据?

我的查询,如果这是正确的术语,需要根据条件从我的一个实体中选择某些记录.我不知道如何在CoreData中编写查询或任何类型的查询.

Col*_*gic 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;
Run Code Online (Sandbox Code Playgroud)

因此,您创建了一个获取请求.NSPredicate就像SQL语句的where条件.因此,您可以使用格式创建谓词(有大量选项可用于创建谓词).设置请求的谓词,然后告诉您的managedObjectContext执行获取请求.请求的任何结果都将在返回的数组中.数组中的每个对象都是Person类型的对象.

如果您希望使用NSFetchedResultsController,它基本上是相同类型的东西.但是,您使用1个不可变的提取请求创建控制器,因此它始终获取相同的数据.如果您需要不同的数据,则需要创建另一个控制器.如果您坚持只使用NSFetchRequests(我从我的UI中编写数据层,因此使用控制器对我来说不是很有用),您可以查询所需的任何数据并返回结果.