Вычисление макс. значения для базового атрибута данных - ошибка NSCFNumber

Я должен узнать максимальное значение атрибута базового объекта данных.

Я нахожусь все еще твердо в кривой обучения Какао, и это - простое тестовое приложение, которое я использую для изучения.

Приложение импортирует состояния из текстового файла и отображает таблицу на экране. Импорт сделан в отдельном, фоновом потоке.

Я нашел этот код онлайн, который я попытался получить работу:

- (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];  // crashes here  

    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);  
} 

Мой объект называют "Fortune", и атрибут называют "идентификатором" (Двойное).

Когда код работает, он отказывает, когда запрос выборки выполняется. Консоль показывает это:

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'  

Какие-либо идеи, почему это не работает? Я озадачен после большого поиска с помощью Google.

Спасибо

Darren.

15
задан Joachim Sauer 30 May 2011 в 13:15
поделиться

1 ответ

Проблема заключалась в том, что эта строка неверна:

[fetch setResultType:NSDictionaryResultType];  

Тип результата должен был быть NSManagedObjectResultType

С уважением

Даррен.

2
ответ дан 1 December 2019 в 02:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: