0

これをデバイスで実行すると、最も奇妙なエラーが発生します(シミュレーターではありません):

次のように、JSON オブジェクトから日付を取得しています。

NSDateFormatter *df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"EEE MMM d HH:mm:ss Z yyyy"];
NSDate *dateX = [df dateFromString: [info objectForKey:@"created_at"]];


NSUInteger desiredComponents = NSYearCalendarUnit | NSMonthCalendarUnit  | 
                               NSWeekCalendarUnit | NSHourCalendarUnit   | 
                               NSDayCalendarUnit  | NSMinuteCalendarUnit | 
                               NSSecondCalendarUnit;

NSDateComponents *elapsedTimeUnits = [[NSCalendar currentCalendar] 
                                      components:desiredComponents
                                      fromDate:dateX
                                      toDate:[NSDate date]
                                      options:0];

ご覧のとおり、フォーマッタを使用して文字列を日付に変換しています。次に、NSDateComponents を作成し、後でそれを使用して (NOW)から(NOW)までの時間を計算しelapsedTimeUnits.hourます。.daydateXNSDate date

そしてそれはうまくいきます!シミュレーターですべてをテストしながら、そう思いました。

dateX が nil であるという非常識なエラー メッセージが表示されましたが、それは自分のデバイスで実行したときだけでした。したがって、シミュレーターでこれを実行するたびに、日付からの正しい時間が表示されます。デバイスで実行すると、4 週間と 1 日と 23 時間前の特定の日付が表示されます。私は NSLogged out を持っており[info objectForKey:@"created_at"]、最初から入力として正しい日付を取得していることを知っています。どうやら、アプリはデバイス上では文字列から日付への変換を実行できませんが、シミュレーター上では実行できません。ここから先はすべて、私が得る出力です。

2012-08-31 00:26:19.773 App[1676:907] *** -[__NSCFCalendar 
components:fromDate:toDate:options:]: fromDate cannot be nil

I mean really, what do you think that operation is supposed to mean with a nil fromDate?

An exception has been avoided for now.

A few of these errors are going to be reported with this complaint, 
then further violations will simply silently do whatever random thing 
results from the nil.

Here is the backtrace where this occurred this time 
(some frames may be missing due to compiler optimizations):

(

0   CoreFoundation                      0x36a5e8bf <redacted> + 86

1   App                                0x00082d67 -[NewsViewController tableView:cellForRowAtIndexPath:] + 478

2   UIKit                               0x384d1b81 <redacted> + 412

3   UIKit                               0x384b693b <redacted> + 1310

4   UIKit                               0x384cde17 <redacted> + 206

5   UIKit                               0x38489f2b <redacted> + 258

6   QuartzCore                          0x357d7e9b <redacted> + 214

7   QuartzCore                          0x357d7a39 <redacted> + 460

8   QuartzCore                          0x357d8975 <redacted> + 16

9   QuartzCore                          0x357d8353 <redacted> + 238

10  QuartzCore                          0x357d8161 <redacted> + 316

11  UIKit                               0x3849000b <redacted> + 126

12  CoreFoundation                      0x36a8caed <redacted> + 20

13  CoreFoundation                      0x36a8ade1 <redacted> + 276

14  CoreFoundation                      0x36a8b137 <redacted> + 742

15  CoreFoundation                      0x369fe39d CFRunLoopRunSpecific + 356

16  CoreFoundation                      0x369fe229 CFRunLoopRunInMode + 104

17  GraphicsServices                    0x353b331b GSEventRunModal + 74

18  UIKit                               0x384da8f9 UIApplicationMain + 1120

19  App                                0x0006107f main + 86

20  App                                0x0005f450 start + 40

)
4

2 に答える 2

2

デバイスの設定を確認し、12/24 時間モードがデバイスのロケールと一致していることを確認してください。(米国では 12 時間、世界の他のほとんどの地域では 24 時間です。)

彼らが対立しているドーナツへのドルは、iOSの「feechure」にぶつかります。

このスレッドを参照してください。

于 2012-08-31T00:01:19.050 に答える