gpt4 book ai didi

iphone - 使用 Between Predicate Statement 和 Float 时发生崩溃

转载 作者:行者123 更新时间:2023-12-03 20:22:21 24 4
gpt4 key购买 nike

所以我正在我的核心数据中搜索当前 map 经度和纬度内的项目。每次我运行该语句时它都会崩溃。

代码:

    NSError *error = nil;
NSFetchRequest *boutiqueRequest = [[NSFetchRequest alloc] init];
NSPredicate *predicateToRun = nil;

[boutiqueRequest setEntity:[NSEntityDescription entityForName:@"Boutique" inManagedObjectContext:managedObjectContext]];

NSLog(@"NE Longitude: %f", [neCoordLong floatValue]);
NSLog(@"NE Latitude: %f", [neCoordLat floatValue]);
NSLog(@"SW Longitude: %f", [swCoordLong floatValue]);
NSLog(@"SW Latitude: %f", [swCoordLat floatValue]);
NSPredicate *longPredicate = [NSPredicate predicateWithFormat: @"longitude BETWEEN %@", [NSArray arrayWithObjects:neCoordLong, swCoordLong, nil]];
NSPredicate *latPredicate = [NSPredicate predicateWithFormat: @"latitude BETWEEN %@", [NSArray arrayWithObjects:neCoordLat, swCoordLat, nil]];
predicateToRun = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:longPredicate, latPredicate, nil]];

[boutiqueRequest setPredicate:predicateToRun];
NSLog(@"%@", [boutiqueRequest predicate]);
NSArray *results = [managedObjectContext executeFetchRequest:boutiqueRequest error:&error];

一旦我调用executeFetchRequest,它就会给我以下崩溃报告

2011-02-24 17:42:43.183 DL2[363:207] 东北经度:153.50582011-02-24 17:42:43.183 DL2[363:207] 东北纬度:-27.8111422011-02-24 17:42:43.183 DL2[363:207]西南经度:153.2860572011-02-24 17:42:43.184 DL2[363:207] SW 纬度:-28.0338042011-02-24 17:42:43.184 DL2[363:207] {153.5058, 153.2861} 之间的经度和 {-27.81114, -28.0338} 之间的纬度

2011-02-24 13:57:18.916 DL2[9628:207] -[NSCFNumber constantValue]: unrecognized selector sent to instance 0x954ba80
2011-02-24 13:57:18.925 DL2[9628:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFNumber constantValue]: unrecognized selector sent to instance 0x954ba80'
*** Call stack at first throw:
(
0 CoreFoundation 0x0121abe9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x0136f5c2 objc_exception_throw + 47
2 CoreFoundation 0x0121c6fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x0118c366 ___forwarding___ + 966
4 CoreFoundation 0x0118bf22 _CF_forwarding_prep_0 + 50
5 CoreData 0x00e18a0b -[NSSQLSimpleWhereIntermediate _generateSQLBetweenStringInContext:] + 1211
6 CoreData 0x00d48931 -[NSSQLSimpleWhereIntermediate generateSQLStringInContext:] + 897
7 CoreData 0x00d4843d -[NSSQLCompoundWhereIntermediate _generateMulticlauseStringInContext:] + 205
8 CoreData 0x00d48342 -[NSSQLCompoundWhereIntermediate generateSQLStringInContext:] + 770
9 CoreData 0x00d47afa -[NSSQLFetchIntermediate generateSQLStringInContext:] + 122
10 CoreData 0x00e0b31d -[NSSQLGenerator newSQLStatementForFetchRequest:ignoreInheritance:countOnly:nestingLevel:] + 413
11 CoreData 0x00d43a78 -[NSSQLAdapter _newSelectStatementWithFetchRequest:ignoreInheritance:] + 488
12 CoreData 0x00d43881 -[NSSQLAdapter newSelectStatementWithFetchRequest:] + 49
13 CoreData 0x00d4372e -[NSSQLCore newRowsForFetchPlan:] + 430
14 CoreData 0x00d42ab5 -[NSSQLCore objectsForFetchRequest:inContext:] + 357
15 CoreData 0x00d4266e -[NSSQLCore executeRequest:withContext:error:] + 206
16 CoreData 0x00df20ec -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 1084
17 CoreData 0x00d3f807 -[NSManagedObjectContext executeFetchRequest:error:] + 359
18 DL2 0x00021060 -[BoutiqueListViewController getBoutiquesToShow] + 1449
19 DL2 0x0002164f -[BoutiqueListViewController viewDidLoad] + 211
20 UIKit 0x003f265e -[UIViewController view] + 179
21 DL2 0x0001ff4e -[BoutiqueMapTabViewController openList] + 698
22 DL2 0x0001f9f3 -[BoutiqueMapTabViewController tabBar:didSelectItem:] + 110
23 UIKit 0x00542167 -[UITabBar _sendAction:withEvent:] + 283
24 UIKit 0x00344a6e -[UIApplication sendAction:to:from:forEvent:] + 119
25 UIKit 0x003d31b5 -[UIControl sendAction:to:forEvent:] + 67
26 UIKit 0x003d5647 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
27 UIKit 0x003d316c -[UIControl sendActionsForControlEvents:] + 49
28 UIKit 0x00344a6e -[UIApplication sendAction:to:from:forEvent:] + 119
29 UIKit 0x003d31b5 -[UIControl sendAction:to:forEvent:] + 67
30 UIKit 0x003d5647 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
31 UIKit 0x003d41f4 -[UIControl touchesEnded:withEvent:] + 458
32 UIKit 0x003690d1 -[UIWindow _sendTouchesForEvent:] + 567
33 UIKit 0x0034a37a -[UIApplication sendEvent:] + 447
34 UIKit 0x0034f732 _UIApplicationHandleEvent + 7576
35 GraphicsServices 0x01b3da36 PurpleEventCallback + 1550
36 CoreFoundation 0x011fc064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
37 CoreFoundation 0x0115c6f7 __CFRunLoopDoSource1 + 215
38 CoreFoundation 0x01159983 __CFRunLoopRun + 979
39 CoreFoundation 0x01159240 CFRunLoopRunSpecific + 208
40 CoreFoundation 0x01159161 CFRunLoopRunInMode + 97
41 GraphicsServices 0x01b3c268 GSEventRunModal + 217
42 GraphicsServices 0x01b3c32d GSEventRun + 115
43 UIKit 0x0035342e UIApplicationMain + 1160
44 DL2 0x000028fc main + 102
45 DL2 0x0000288d start + 53

我似乎看不出问题所在。我不知道是否我离它太近了,或者是否与它是一个 Float 或什么有关!任何帮助将不胜感激

最佳答案

好吧,我无法解决为什么 Between 函数不起作用 - 但 mysql 也不允许在 float 上使用 BETWEEN 。所以我假设这是类似的原因。

我更改了代码以仅创建它自己的 Between 语句。

    NSPredicate *longPredicate = nil;
NSPredicate *latPredicate = nil;
if ([neCoordLong floatValue] > [swCoordLong floatValue])
{
longPredicate = [NSPredicate predicateWithFormat: @" longitude <= %@ AND longitude >= %@", neCoordLong, swCoordLong];
}else {
longPredicate = [NSPredicate predicateWithFormat: @" longitude <= %@ AND longitude >= %@", swCoordLong, neCoordLong];
}
if ([neCoordLat floatValue] > [swCoordLat floatValue])
{
latPredicate = [NSPredicate predicateWithFormat: @" latitude <= %@ AND latitude >= %@", neCoordLat, swCoordLat];
}else {
latPredicate = [NSPredicate predicateWithFormat: @" latitude <= %@ AND latitude >= %@", swCoordLat, neCoordLat];
}

希望这对其他人有帮助

关于iphone - 使用 Between Predicate Statement 和 Float 时发生崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5100221/

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