开发者

(Core Data )Fetch an specific entity with a max property

开发者 https://www.devze.com 2023-02-14 06:47 出处:网络
I have a Entity wich has a toMany relationship to another one. In this second one I have an attribute called \"versionNumber\" so. I have an object on entity type A, and I want to get the related enti

I have a Entity wich has a toMany relationship to another one. In this second one I have an attribute called "versionNumber" so. I have an object on entity type A, and I want to get the related entity B which has the biggest (max) versionNumber.

I have the following but that returns me a result obtained over all records on entity B, not over the specific entiti开发者_运维百科es related to the object of type A.

   NSInteger vNumber = 0;

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:DPA_VERSION_KEY inManagedObjectContext:[self managedObjectContext]];
[request setEntity:entity];

// Specify that the request should return dictionaries.
[request setResultType:NSDictionaryResultType];

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:VERSION_NUMBER_KEY];
NSExpression *maxNumberExpression = [NSExpression expressionForFunction:@"max:"
                                                              arguments:[NSArray arrayWithObject:keyPathExpression]];

NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:@"maxNumber"];
[expressionDescription setExpression:maxNumberExpression];
[expressionDescription setExpressionResultType:NSDecimalAttributeType];






[request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];

// Execute the fetch.
NSError *error = nil;
NSArray *objects = [[self managedObjectContext] executeFetchRequest:request error:&error];
if (objects == nil) {
    // Handle the error.
}
else {
    if ([objects count] > 0) {
        vNumber = [[[objects objectAtIndex:0] valueForKey:@"maxNumber"] integerValue] +1;
    }
}

[expressionDescription release];
[request release];

return vNumber;

I have an idea but I hadn't been able to materialize it. I must ask SELF which is my object A to do that fetch over its relationship toVersions (Entity B). Thanks for the help.

G.


Set a predicate to limit the request to only those B objects who have a relationship with A.

[request setPredicate:[NSPredicate predicateWithFormat:@"myA == %@", myA];
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号