iOS NSDate 和 NSManagedObject
Posted
技术标签:
【中文标题】iOS NSDate 和 NSManagedObject【英文标题】:iOS NSDate and NSManagedObject 【发布时间】:2012-01-06 05:12:15 【问题描述】:有一个非常奇怪的问题。处理完一个文件后,我读了一个包含三行的 txt。版本,从日期时间,到日期时间。我阅读了这些行并将一个对象添加到 NSCoreData。在模拟器中运行时一切正常,但一旦我部署到我的 iPhone,NSDates 就会返回为空。
这是从 iPhone 运行时的控制台输出
2012-01-05 23:58:25.478 FlightPath[10257:707] 7/28/2011 12:00:00 AM
2012-01-05 23:58:27.911 FlightPath[10257:707] (null)
2012-01-05 23:58:29.718 FlightPath[10257:707] (null)
这是运行 iPhone Sim 时的控制台输出
2012-01-06 00:07:07.900 FlightPath[1755:11903] 7/28/2011 12:00:00 AM
2012-01-06 00:07:08.899 FlightPath[1755:11903] 7/28/2011 12:00:00 AM
2012-01-06 00:07:11.686 FlightPath[1755:11903] 7/28/2011 12:00:00 AM
这是代码...我在 tDate 中添加用于测试目的。我想确保我不需要将 __block 添加到 NSManagedObject。
NSString *mapInfoPath = [[mapData objectAtIndex:1] stringByAppendingPathComponent: @"Tiles/info.txt"];
NSString *mapInfo = [[NSString alloc] initWithContentsOfFile:mapInfoPath encoding:NSUTF8StringEncoding error:nil];
__block NSDate *tDate = nil;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"M/d/yyyy h:mm:ss a"];
__block int lineCount = 0;
[mapInfo enumerateLinesUsingBlock:^(NSString *line, BOOL *stop)
switch (lineCount)
case 1:
map.editionNumber = [NSNumber numberWithInt:[line intValue]];
break;
case 2:
tDate = [dateFormatter dateFromString:line];
map.fromDate = [dateFormatter dateFromString:line];
NSLog(@"%@", line);
NSLog(@"%@", [dateFormatter stringFromDate:map.fromDate]);
NSLog(@"%@", [dateFormatter stringFromDate:tDate]);
break;
case 3:
map.toDate = [dateFormatter dateFromString:line];
break;
default:
break;
lineCount += 1;
];
map.processed = [NSNumber numberWithBool:YES];
任何帮助都会很棒....卡住了,无法弄清楚为什么它适用于 sim 而不是 iPhone。
谢谢!
【问题讨论】:
【参考方案1】:当手机处于 24 小时模式时,这似乎是一个错误。直接答案在这里:http://multinc.com/2009/09/27/iphone-sdk-time-bug-for-international-users/ 我从这篇文章中找到的:Why my NSDate Formatter can't convert correctly and returns null on device?
因为我一直都知道我会解析一个 12 小时的日期时间,所以我只使用了 setLocale 就可以了。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
[dateFormatter setDateFormat:@"M/d/yyyy h:mm:ss aa"];
【讨论】:
以上是关于iOS NSDate 和 NSManagedObject的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 上将“MongoDB 日期时间(ISO 日期)”解析为 NSDate(swift 和 Objective-c)