我需要有一个SUBQUERY来获取HappyHour实体的属性。
像这样:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(0 != SUBQUERY(details.%K, $hh, ($hh.startTime < %@) AND ($hh.endTime > %@)).@count)", weekdayString, theDate, theDate];
仅在DEVICE上我收到此错误/例外:
* 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'无法为谓词生成SQL(0!= SUBQUERY(details.hh_montag,$ hh,$ hh.startTime&lt; CAST) (316482000.000000,“NSDate”)AND $ hh.endTime&gt; CAST(316482000.000000,“NSDate”))。@ count)(RHS问题)'
0 CoreFoundation 0x32cf964f __exceptionPreprocess + 114
1 libobjc.A.dylib 0x3313cc5d objc_exception_throw + 24
2 CoreData 0x3228a829 - [NSSQLGenerator newSQLStatementForFetchRequest:ignoreInheritance:countOnly:nestingLevel:] + 688
3 CoreData 0x3228a2eb - [NSSQLAdapter _newSelectStatementWithFetchRequest:ignoreInheritance:] + 378
4 CoreData 0x3228a169 - [NSSQLAdapter newSelectStatementWithFetchRequest:] + 16
5 CoreData 0x3228a005 - [NSSQLCore newRowsForFetchPlan:] + 288
6 CoreData 0x322892c5 - [NSSQLCore objectsForFetchRequest:inContext:] + 420
7 CoreData 0x32288875 - [NSSQLCore executeRequest:withContext:error:] + 304
8 CoreData 0x32287dd5 - [NSPersistentStoreCoordinator executeRequest:withContext:error:] + 896
9 CoreData 0x3228669f - [NSManagedObjectContext executeFetchRequest:错误:] + 374
10 CoreData 0x322b9d7f - [NSFetchedResultsController performFetch:] + 766
11 HappyHourRadar 0x0003e723 - [ResultViewController viewDidLoad] + 86
...
抛出'NSException'实例后终止调用
收到的信号:SIGABRT(已中止)
处理以退出代码-1
结束[ResultViewController viewDidLoad] +86
我打电话
[self fetchedResultsController] performFetch:&amp; error]
在控制台中我也收到此消息:
无法加载符号文件:无法加载符号文件:警告:无法读取/Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3.3(8J2)/ Symbols/Developer/usr/lib/libXcodeDebuggerSupport的符号。 dylib(找不到文件)。
由于我没有找到任何可以帮助我的东西,我想这可能是非常奇怪的东西,或者我只是搞砸了一些相当标准的东西,我找不到因为我有限的目标c背景...
无论如何,如果有人能给出提示,我会很高兴,所以我可以继续而不必将整个应用程序模型层重写为脏东西(比如获取所有条目并将它们保存在数组中并处理过滤器函数)。像那样;。)
编辑:
这是模型图。从这个自动生成的模型文件。
生成HappyHour类:
@interface HappyHour : NSManagedObject
{
}
@property (nonatomic, retain) NSDate * endTime;
@property (nonatomic, retain) NSDate * startTime;
@end
答案 0 :(得分:1)
这些粗体标记的段落显然不匹配:
和
@class Location;
@interface LocationDetails: NSManagedObject {}
@property(nonatomic,retain)NSString * phone;
...
@property(非原子,保留)NSSet * hh_monday ;
...
@end
最终的解决方案是:
NSTimeInterval secondsPerDay = 7 * 60 * 60;
NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"EEEE"];
SOLUTION >> [f setLocale: [[[NSLocale alloc] initWithLocaleIdentifier:@"en_UK"] autorelease]];
NSString *weekdayString = [NSString stringWithFormat:@"hh_%@", [[f stringFromDate:[NSDate dateWithTimeIntervalSinceNow:-secondsPerDay]] lowercaseString]];
黄金法则
请始终牢记,设备在不同的位置/语言中的工作方式会有所不同。
因此,可能会避免从位置/语言相关的类(如NSDate(Formatter))生成键选择器(?)。
或者确保这些类为每种情况返回相同的值。 (希望我已经用这个解决方案处理了一些问题......如果我弄错了,请纠正我。)