核心数据获取结果

Posted

技术标签:

【中文标题】核心数据获取结果【英文标题】:core data fetch results 【发布时间】:2009-08-03 16:24:22 【问题描述】:

使用下面的代码,我正在创建一个获取请求。我遇到的问题是获取获取请求数据并对其进行处理,例如将其放入变量中(就像我在下面尝试使用 firstManagedObject 变量一样)。即,我不明白如何处理我创建的“结果”NSArray(如下代码所示)以获取不是“(实体:问题;id:0x10b6250

NSLog 结果:

获取请求 getQuestionsByParent:找到 2 个(子变量: formId = "9822217D-6A55-4475-88EC-E2552B336E1B"; 节数 = 2; , 结果:( (实体:问题;id:0x10a8720 x-coredata://90FA9FD7-4CFC-4039-8A0C-40116055CADF/Question/p2;数据:故障), (实体:问题;id:0x1092920 x-coredata://90FA9FD7-4CFC-4039-8A0C-40116055CADF/Question/p4;数据:故障) ))

代码:

    NSManagedObjectContext *moc_ = [self managedObjectContext];

    NSMutableDictionary *dictionary=[[NSMutableDictionary alloc]init];
    [dictionary setObject:section.ordinal forKey:@"sectionNumber"];
    [dictionary setObject:section.parent.id forKey:@"formId"];

    NSError *error = nil;    
    NSManagedObjectModel *model = [[moc_ persistentStoreCoordinator] managedObjectModel];
    NSFetchRequest *fetchRequest = [model fetchRequestFromTemplateWithName:@"getQuestionsByParent" substitutionVariables:dictionary];
    NSAssert(fetchRequest, @"Can't find question fetch request");

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"ordinal" ascending:YES];
    NSArray *sortDescriptors = [[NSMutableArray alloc] initWithObjects:sortDescriptor, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];

    NSArray *result = [[NSArray alloc] init];
    result = [moc_ executeFetchRequest:fetchRequest error:&error];
    //return result;

    NSLog(@"fetch request getQuestionsByParent: %u found (sub variables:%@, results:%@)", [result count], dictionary, result);

    NSManagedObject *firstManagedObject = [result objectAtIndex:0];

【问题讨论】:

【参考方案1】:

你有你的提取,你有数据。如果您已经为对象实现了自定义子类,您可以只查询属性,如果没有,您可以使用 KVC 针对对象访问它们。例如,假设您有一个名为“myAttribute”的属性:

NSManagedObject *firstManagedObject = [result objectAtIndex:0];
NSLog(@"firstObject.myAttribute: %@", [firstObject valueForKey:@"myAttribute"]);

如果您有一个对象(问题)的自定义子类,将属性声明为动态属性,那么它将是:

Question *firstQuestion = [result objectAtIndex:0];
NSLog(@"firstQuestion.myAttribute: %@", firstQuestion.myAttribute);

【讨论】:

以上是关于核心数据获取结果的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:如何进行第二次获取仅限于先前获取的结果?

获取请求中的一些奇怪结果 - 核心数据

iOS 核心数据 - 获取结果

将获取的结果 NSDate 分成每天使用核心数据的部分

从不同核心数据实体获取数据并将结果转换为相应类的通用方法

核心数据获取请求不返回不同的结果