2012-08-24 4 views
1

est-il une raison pour laquelle ecGraph irait bien sur le simulateur, mais encore me donner cette erreur quand je le lance sur mon appareil:ecGraph ne fonctionne pas sur l'appareil, mais fonctionne sur simulateur

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 

)

+0

J'ai exactement le même problème. Avez-vous déjà compris? Erreur vraiment trolly aussi. Je convertis une chaîne en une date avec NSDateFormatter, puis la convertis pour montrer depuis combien de temps, en utilisant NSUInteger desiredComponents et NSDateComponents * elapsedTimeUnits. "Je veux dire vraiment, qu'en penses-tu ...", lol! – Sti

+0

Jouer avec les paramètres de données et d'heure sur l'appareil, cela a fonctionné pour moi. Je les ai ensuite changés dans le code, donc tout est localisé. – JH95

Répondre

3

Vous essayez d'obtenir NSDateComponents d'un NSDate nul comme ça:

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]; 

probablement une simple vérification peut être utile:

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]; 
} 
1

Votre appareil utilise un format de région différent de celui de votre simulateur.

Si vous faites correspondre ceux-ci (en Settings -> General -> International), ils devraient afficher le même résultat. Dans mon cas, en faisant cela, ils ont tous les deux échoué, mais le simulateur n'a pas donné le même journal que l'appareil, alors j'ai failli le manquer.

Je suppose que vous utilisez un NSDateFormatter pour formater une date-chaîne à NSDate comme je l'étais. Dans ce cas, vous devez vous assurer que cela ne dépendra pas du type de région du téléphone et définir la solution pour toujours être la même, où que vous soyez.

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

Ceci indique au formateur de formater en utilisant les normes britanniques, ce qui était nécessaire dans mon cas. Entrez votre code de pays requis, à savoir en_US etc.

Sti

+0

Je n'utilise pas NSDataFormatter pour formater la chaîne, comment pourrais-je le faire? – JH95

+0

@JakeHoskins - Je suis sûr qu'il y a plusieurs façons de résoudre ce problème, mais je ne peux rien dire sans voir du code. Modifiez votre question pour qu'elle contienne la méthode qui utilise 'fromDate'. – Sti

Questions connexes