1

ECGraph がシミュレーターで正常に動作する理由はありますが、デバイスで実行するとこのエラーが発生します。

 2012-08-24 01:57:18.543 Portfolio[3538: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                      0x37a1d78f <redacted> + 86
1   Portfolio                           0x000a0d1f -[ECGraph(Private) getDaysFrom:To:] + 202
2   Portfolio                           0x000a1577 -[ECGraph(Private) getXDaysFromLines:minDate:] + 502
3   Portfolio                           0x000a2623 -[ECGraph drawCurveWithLines:lineWidth:color:] + 978
4   Portfolio                           0x000a716f -[GraphView drawRect:] + 2682
5   UIKit                               0x38b1811d <redacted> + 364
6   QuartzCore                          0x39468035 <redacted> + 112
7   QuartzCore                          0x39467771 <redacted> + 1808
8   QuartzCore                          0x39466f45 <redacted> + 980
9   QuartzCore                          0x39466a7b <redacted> + 202
10  QuartzCore                          0x3953a9f5 <redacted> + 24
11  QuartzCore                          0x394663d3 <redacted> + 238
12  QuartzCore                          0x39466119 <redacted> + 316
13  QuartzCore                          0x3945dfe1 <redacted> + 60
14  CoreFoundation                      0x37a4f18d <redacted> + 20
15  CoreFoundation                      0x37a4d3f9 <redacted> + 276
16  CoreFoundation                      0x37a4d74f <redacted> + 742
17  CoreFoundation                      0x379cbc1d CFRunLoopRunSpecific + 356
18  CoreFoundation                      0x379cbaa9 CFRunLoopRunInMode + 104
19  GraphicsServices                    0x3a88f33b GSEventRunModal + 74
20  UIKit                               0x38b35535 UIApplicationMain + 1120
21  Portfolio                           0x00094e7d main + 152
22  Portfolio                           0x00094de0 start + 40

)

4

2 に答える 2

3

そのような nil NSDate から NSDateComponents を取得しようとしています:

NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate* fromDate = nil;
NSDate* toDate = [NSDate date];
unsigned int components = NSYearCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit;
NSDateComponents* dateComponents = [gregorian components:uintFlags fromDate:fromDate  toDate:toDate  options:0];

おそらく、簡単なチェックが役立つ場合があります。

NSDate* fromDate = nil;
NSDate* toDate = [NSDate date];

NSDateComponents* dateComponents = nil;

if(fromDate != nil)
{
 NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
 unsigned int components = NSYearCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit;
 dateComponents = [gregorian components:uintFlags fromDate:fromDate  toDate:toDate  options:0];
}
于 2012-10-12T11:26:26.580 に答える
1

お使いのデバイスは、シミュレーターとは異なる地域形式を使用しています。

それらを ( でSettings -> General -> International) 一致させると、同じ結果が表示されるはずです。私の場合、これを行うと両方とも失敗しましたが、シミュレーターはデバイスと同じログを提供しなかったため、ほとんど見逃していました。

私とNSDateFormatter同じように、文字列日付を NSDate にフォーマットするために を使用していると思います。その場合、これが電話の地域の種類に依存しないことを確認し、どこにいても常に同じになるようにソリューションを設定する必要があります.

[df setLocale:([[NSLocale alloc] initWithLocaleIdentifier:@"en_UK"])];
// df being the NSDateFormatter-object

これは、英国の標準を使用してフォーマットするようにフォーマッターに指示します。これは、私の場合に必要でした。必要な国コードen_USなどを入力します。

スティ

于 2012-08-31T02:10:20.000 に答える