我创建了一个CoreData模型并定义了我的实体和属性。
我还创建了一个符合<NSFetchedResultsControllerDelegate>
的NSObject类(名为dbInterface),并添加了以下对象
NSFetchedResultsController *fetchedResultsController;
NSManagedObjectContext *managedObjectContext;
这是我迷失的地方。我现在如何从创建的sqlite3文件中获取数据?
我的查询,如果这是正确的术语,则需要根据条件从我的某个实体中选择某些记录。我不知道如何在CoreData中编写查询或任何类型。
答案 0 :(得分:9)
您可能不需要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条件。因此,您可以使用格式(there are tons of options for creating predicates)创建谓词。设置请求的谓词,然后告诉您的managedObjectContext执行获取请求。请求的任何结果都将在返回的数组中。数组中的每个对象都是Person类型的对象。
如果您希望使用NSFetchedResultsController,它基本上是相同类型的东西。但是,您使用1个不可变的提取请求创建控制器,因此它始终获取相同的数据。如果您需要不同的数据,则需要创建另一个控制器。如果你坚持只使用NSFetchRequests(我从我的UI中编写数据层,所以使用控制器对我来说不是很有用),你可以查询你想要的任何数据并返回结果。