iOS NSDate 和 NSManagedObject

标签 ios cocoa-touch ios5

遇到一个很奇怪的问题。处理文件后,我读取了一个包含三行的 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。

谢谢!

最佳答案

当手机处于 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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8753659/

相关文章:

ios - 使图像适合iOS中的按钮

iphone - Objective C HTML 转义/反转义

objective-c - 你可以在 iOS 上调整 UIImage 的大小同时保持比例吗?用于生成缩略图

ios - UIGestureRecognizer 与 UITouch 代理性能对比

ios - for 循环中的 attributedString 和 textView 颜色变化

ios - 在 UitableView 中的 UitableView

objective-c - 为什么旋转后 UIImageView 的大小会发生变化?

IOS addPeriodicTimeObserverForInterval 触发太多次

ios - 使用Auto Layout的iAd ADBannerView有多种外观

ios - UITextView 禁用文本选择