gpt4 book ai didi

objective-c - 计算核心数据属性的最大值 - NSCFNumber 错误

转载 作者:太空狗 更新时间:2023-10-30 03:17:46 26 4
gpt4 key购买 nike

我需要找出核心数据实体的属性的最大值。

我仍然坚定地处于 Cocoa 学习曲线中,这是一个我用来学习的简单测试应用程序。

该应用程序从文本文件中导入财富,并在屏幕上显示一个表格。导入在单独的后台线程中完成。

我在网上找到了这段代码,我试图让它工作:

- (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”,属性名为“id”(Double)。

当代码运行时,它会在执行提取请求时崩溃。控制台显示:

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'  

知道为什么这不起作用吗?经过大量谷歌搜索后,我被难住了。

谢谢

达伦。

最佳答案

我必须解决一个类似的问题,但处理方法略有不同:

  • 查询实体
  • 按您想要的属性排序
  • 将抓取结果限制为 1

代码如下。我正在查询名为“entityName”的实体并检索属性“sequenceId”的最大值。

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *res = [NSEntityDescription entityForName:@"entityName" inManagedObjectContext:managedObjectContext];
[request setEntity:res];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sequenceId" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];

[request setFetchLimit:1];

NSError *error = nil;
NSArray *results = [managedObjectContext executeFetchRequest:request error:&error];
[request release];
if (results == nil) {
NSLog(@"error fetching the results: %@",error);
}

NSInteger maximumValue = 0;
if (results.count == 1) {
Result *result = (Result*)[results objectAtIndex:0];
maximumValue = [result.sequenceId integerValue];
}

关于objective-c - 计算核心数据属性的最大值 - NSCFNumber 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1927981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com