Core Data getting [_NSObjectID_48_1 userName]: unrecognized selector sent to instance

让人想犯罪 __ 提交于 2020-01-06 16:11:33

问题


A->>B

I have two entities A&B and each are related as one to many relationship. I am trying to access specific B attribute value and all A entity attributes by grouping. However I am getting error as [_NSObjectID_48_1 userName]: unrecognized selector sent to instance when I try to access relationship object of B(that is a).

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**
}

回答1:


You will receive "object id" instead of instance of NSManagedObject for the relative object when the result of NSFetchRequest is set to NSDictionaryResultType.

So you need to fetch it "by object id":

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

UPD:

fr.returnsObjectsAsFaults = NO;

is useless here because the return type is NSDictionaryResultType.




回答2:


How about using the following for iteration..

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


来源:https://stackoverflow.com/questions/29010721/core-data-getting-nsobjectid-48-1-username-unrecognized-selector-sent-to-ins

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!