簡體   English   中英

ECGraph不在設備上工作,但在模擬器上工作

[英]ECGraph not working on device, but works on simulator

有什么理由說為什么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

你試圖從這樣的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];
}

您的設備使用的區域格式與模擬器不同。

如果你匹配(在Settings -> General -> International ),那么他們應該顯示相同的結果。 在我的情況下,當這樣做時,他們都失敗了,但模擬器沒有提供與設備相同的日志,所以我幾乎錯過了它。

我假設您正在使用NSDateFormatter將某些字符串日期格式化為NSDate。 在這種情況下,您必須確保這不取決於手機的區域類型,並將解決方案設置為始終相同,無論您是誰。

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

這告訴格式化程序使用英國標准進行格式化,這在我的案例中是必需的。 輸入您需要的國家代碼,即en_US等。

性病

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM