核心数据获取:无法识别的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); }