我正在使用带有 Xcode 7.2.1 的 DBAccess 框架 v1.6.12。
将 NSDate 属性与 DBObject 的子类一起使用会崩溃。
<Error>: -[__NSCFString timeIntervalSinceDate:]: unrecognized selector sent to instance 0x17027eb40
<Warning>: WARNING: GoogleAnalytics 3.14 void GAIUncaughtExceptionHandler(NSException *) (GAIUncaughtExceptionHandler.m:48): Uncaught exception: -[__NSCFString timeIntervalSinceDate:]: unrecognized selector sent to instance 0x17027eb40
<Warning>: void MyUncaughtExceptionHandler(NSException *__strong) [Line 19] Exception Name: NSInvalidArgumentException
<Warning>: void MyUncaughtExceptionHandler(NSException *__strong) [Line 20] Exception Reason: -[__NSCFString timeIntervalSinceDate:]: unrecognized selector sent to instance 0x17027eb40
重现:
将设备设置为日语,将时间格式设置为NOT to use 24 hours
,则转换后的日期格式变为错误格式。
我认为 DBAccess 是否使用不使用 setLocale 的 NSDateFormatter 或使用 currentLocale 将 NSDate 转换为 TEXT。
// Implements DBDelegate
- (DBAccessSettings*)getCustomSettings {
DBAccessSettings *settings = [[DBAccessSettings alloc] init];
settings.useHighPerformanceDates = NO;
return settings;
}
static void testcode()
{
NSDate *now = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy/MM/dd HH:mm:ss"];
NSLog(@"without setLocale=%@", [formatter stringFromDate:now]);
[formatter setLocale:[NSLocale systemLocale]];
NSLog(@"systemLocale=%@", [formatter stringFromDate:now]);
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
NSLog(@"en_US_POSIX=%@", [formatter stringFromDate:now]);
[formatter setLocale:[NSLocale currentLocale]];
NSLog(@"currentLocale=%@", [formatter stringFromDate:now]);
}
//--- English language or `Use 24 hours` to be ON.
without setLocale=2016/04/04 15:40:00
systemLocale=2016/04/04 15:40:00
en_US_POSIX=2016/04/04 15:40:00
currentLocale=2016/04/04 15:40:00
//--- Japanese language and `Use 24 hours` to be OFF.
without setLocale=2016/04/04 15午後3:40:47
systemLocale=2016/04/04 15:40:47
en_US_POSIX=2016/04/04 15:40:47
currentLocale=2016/04/04 15午後3:40:47
因此,存储的NSDate
数据转换为字符串。然后它的列将被视为 TEXT 类型。
我希望 DBAccess 在 NSDate 和 TEXT 之间转换时使用带有“en_US_POSIX”的 systemLocale 或 LocaleIdentifier。
你能告诉我怎么做吗?
谢谢。