2013-02-08 44 views
0

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

NSFetchedResultsController *fetchedResultsController; 
NSManagedObjectContext *managedObjectContext; 

这里就是我很失落。我现在如何继续从创建的sqlite3文件中获取数据?

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

+2

“NSFetchedResultsController”的文档包含详细的示例代码以及使用它的六个不同示例应用程序。你有没有一个具体的问题答案? – 2013-02-08 18:05:24

+0

那么现在我至少知道在哪里看,谢谢!我被不同的网站抛弃,创建了模型包装器和模型对象上下文。 – jacobronniegeorge 2013-02-08 18:15:08

回答

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(我从我的用户界面中分配我的数据层,所以使用控制器对我来说并不是很有用),你可以查询你想要的任何数据并返回结果。

+0

正如你所说,我不使用tableview ...我只是想查询和搜索特定的记录,并加载到一个数组。我认为这是加载到数组中的正确方法? – jacobronniegeorge 2013-02-08 18:13:24

+1

是的,使用上面的代码,'结果'数组是匹配核心数据上下文中谓词的对象数组 – ColdLogic 2013-02-08 18:17:36

+0

抛出一个错误:'for(Person * p在结果中)'使用未声明的标识符 – jacobronniegeorge 2013-02-08 18:38:52