核心数据获取:无法识别的select器发送到实例

A – >> B

我有两个实体A和B,每个都是一对多的关系。 我试图通过分组访问特定的B属性值和所有A实体属性。 但是我得到错误作为[_NSObjectID_48_1 userName] :无法识别的select器发送到实例当我尝试访问B(即一个)的关系对象。

 NSManagedObjectContext *context = [[SamCoreDataHelper sharedInstance] managedObjectContext]; NSFetchRequest *fr = [[NSFetchRequest alloc] initWithEntityName:@"B"]; NSError *error; NSExpressionDescription *total = [[NSExpressionDescription alloc] init]; [total setExpression:[NSExpression expressionWithFormat:@"@sum.marks"]]; [total setName:@"total"]; [total setExpressionResultType:NSDecimalAttributeType]; [fr setPropertiesToFetch:[NSArray arrayWithObjects:@"subject",@"a", total, nil]]; [fr setPropertiesToGroupBy:[NSArray arrayWithObjects:@"subject", @"a", nil]]; [fr setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObject:@"a"]]; fr.returnsObjectsAsFaults = NO; [fr setResultType:NSDictionaryResultType ]; NSArray *resultArray = [context executeFetchRequest:fr error:&error]; for (NSDictionary *result in resultArray) { NSNumber *total = [result valueForKey:@"total"]; NSString *subject = [result valueForKey:@"subject"]; A *a = [result objectForKey:@"a"]; NSLog(@"%@", a.useName);// Here I am getting error as **[_NSObjectID_48_1 userName]: unrecognized selector sent to instance** } 

NSFetchRequest的结果设置为NSDictionaryResultType时,您将收到“对象id”而不是相对对象的NSManagedObject的实例。

所以你需要“通过对象ID”来获取它:

 A * a = (A*)[ managedObjectContext objectWithID:[result valueForKey:@"a"]]; NSLog("%@",a.userName ); 

UPD:

 fr.returnsObjectsAsFaults = NO; 

在这里没用,因为返回types是NSDictionaryResultType

如何使用下面的迭代..

 for (A *a in resultArray) { NSLog(@"%@", a.useName); }