Hi,

I need to find out the maximum value of an attribute of a core data entity. I'm still in the Cocoa learning curve, and this is a simple test app that I'm using to learn.

The app imports fortunes from a text file and displays a table on the screen. The imports are done in a separate, background thread.

I found this code online, which I have attempted to get working:

- (double)getMaxID
{
    NSLog(@"in getMaxID");  // debug

// Use a new moc with the original persistentStoreCoordinator to ensure thread safety
    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
[moc setPersistentStoreCoordinator:[[self delegate] persistentStoreCoordinator]];

    // Create fetch
    NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:[NSEntityDescription entityForName:@"Fortune" inManagedObjectContext:moc]];
    [fetch setResultType:NSDictionaryResultType];

    // Expression for Max ID
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"id"]; NSExpression *minExpression = [NSExpression expressionForFunction:@"max:" arguments:[NSArray arrayWithObject:keyPathExpression]]; NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
    [expressionDescription setName:@"maxID"];
    [expressionDescription setExpression:minExpression];
    [expressionDescription setExpressionResultType:NSDoubleAttributeType];
[fetch setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];

    // Execute the fetch.
    double theID = 0;
    NSError *error = nil;
    NSArray *objects = nil;
    objects = [moc executeFetchRequest:fetch error:&error];

    if (objects && ([objects count] > 0))
    {
        NSLog(@"query successful");  // debug
theID = [((NSNumber *)[[objects objectAtIndex:0] valueForKey:@"maxID"]) doubleValue];
    }
    else
    {
        NSLog(@"Setting default value for theID");  // debug
        theID = 0;
    }

    return(theID);
}


My entity is called "Fortune" and the attribute is called "id" (a Double).

When the code runs it crashes when the fetch request is executed. The console shows this:

2009-12-18 00:53:42.777 FortunesHelperMVC[4027:1703] -[NSCFNumber count]: unrecognized selector sent to instance 0x1004d7b10 2009-12-18 00:53:42.778 FortunesHelperMVC[4027:1703] An uncaught exception was raised 2009-12-18 00:53:42.778 FortunesHelperMVC[4027:1703] -[NSCFNumber count]: unrecognized selector sent to instance 0x1004d7b10 2009-12-18 00:53:42.779 FortunesHelperMVC[4027:1703] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFNumber count]: unrecognized selector sent to instance 0x1004d7b10'
*** Call stack at first throw:
(
0 CoreFoundation 0x00007fff83ed9444 __exceptionPreprocess + 180 1 libobjc.A.dylib 0x00007fff85fbb0f3 objc_exception_throw + 45 2 CoreFoundation 0x00007fff83f321c0 +[NSObject(NSObject) doesNotRecognizeSelector:] + 0 3 CoreFoundation 0x00007fff83eac08f ___forwarding___ + 751 4 CoreFoundation 0x00007fff83ea81d8 _CF_forwarding_prep_0 + 232 5 Foundation 0x00007fff88a5609e +[_NSPredicateUtilities max:] + 46 6 Foundation 0x00007fff8893ce72 -[NSFunctionExpression expressionValueWithObject:context:] + 530 7 CoreData 0x00007fff8613b5b1 -[NSMappedObjectStore executeFetchRequest:withContext:] + 2081 8 CoreData 0x00007fff8613ad10 -[NSMappedObjectStore executeRequest:withContext:] + 80 9 CoreData 0x00007fff86108900 -[NSPersistentStoreCoordinator(_NSInternalMethods) executeRequest:withContext:] + 688 10 CoreData 0x00007fff8610621b -[NSManagedObjectContext executeFetchRequest:error:] + 267 11 FortunesHelperMVC 0x0000000100001d9d -[ImportOperation getMaxID] + 572 12 FortunesHelperMVC 0x0000000100001f95 -[ImportOperation main] + 330 13 Foundation 0x00007fff888f406d -[__NSOperationInternal start] + 681 14 Foundation 0x00007fff888f3d23 ____startOperations_block_invoke_2 + 99 15 libSystem.B.dylib 0x00007fff86a98ce8 _dispatch_call_block_and_release + 15 16 libSystem.B.dylib 0x00007fff86a77279 _dispatch_worker_thread2 + 231 17 libSystem.B.dylib 0x00007fff86a76bb8 _pthread_wqthread + 353 18 libSystem.B.dylib 0x00007fff86a76a55 start_wqthread + 13
)
terminate called after throwing an instance of 'NSException'


Any ideas why this isn't working?

Thanks

Darren.



_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to