2009-08-19 6 views
1
2009-08-19 11:00:06.482 Pickers[26090:20b] *** Assertion failure in -[UIDatePickerView _updateBitsForDate:andReload:animateIfNeeded:], /SourceCache/UIKit/UIKit-963.10/UIDatePicker.m:908 
2009-08-19 11:00:06.483 Pickers[26090:20b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: date' 
2009-08-19 11:00:06.484 Pickers[26090:20b] Stack: (
    807902715, 
    2513055291, 
    807986683, 
    811271572, 
    816448278, 
    816444436, 
    816445688, 
    10353, 
    815223951, 
    815274694, 
    815269866, 
    815277278, 
    9116, 
    814713539, 
    814750709, 
    814739251, 
    814722434, 
    814748641, 
    839148405, 
    807687520, 
    807683624, 
    814715661, 
    814752238, 
    8242 
)

Je reçois toujours cette erreur. J'ai suivi jusqu'à la classe fautive, DatePickerViewController, parce que quand je ne l'inclue pas dans le UITabBarController, il ne plante pas. L'ensemble du projet compile bien cependant. Voici DatePickerViewController:iPhone dev - Aide NSInternalInconsistencyException?

/* 
File : DatePickerViewController.m 
Abstract: View Controller 
project Pickers 

Copyright (C) 2009 Mitchell K. All Rights Reserved. 

*/ 

#import "DatePickerViewController.h" 
#import "Model.h" 


@implementation DatePickerViewController 

@synthesize datePicker; 


#pragma mark - 
#pragma mark Setting up/Tearing down 

- (id)init { 
    if((self = [super init])) { 
    } 
    return self; 
} 

- (void)dealloc { 
    [datePicker release]; 
    [super dealloc]; 
} 

- (void)loadView { 
    UIView *localView = [[UIView alloc] initWithFrame: 
           CGRectMake(0, 0, 320, 411)]; 
    [localView setBackgroundColor:[UIColor whiteColor]]; 
    [self setView:localView]; 
    [localView release]; 
} 

- (void)viewDidLoad { 
    UIDatePicker *localDatePicker = [[UIDatePicker alloc] initWithFrame: 
         CGRectMake(0, 0, 320, 216)]; 
    // ======******OFFENDING LINE BELOW************======= 
    [localDatePicker setDate:[[Model sharedModel] dateCache] animated:NO]; 
    /// =====**********========================*************=========== 
    [localDatePicker addTarget:self action:@selector(datePicker_ValueChanged:) 
           forControlEvents:UIControlEventValueChanged]; 
    [self setDatePicker:localDatePicker]; 
    [localDatePicker release]; 

    UIButton *btnSelect = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [btnSelect setFrame:CGRectMake(100, 298, 120, 37)]; 
    [btnSelect setTitle:@"Select" forState:UIControlStateNormal]; 
    [btnSelect addTarget:self action:@selector(btnSelect_Pressed:) 
     forControlEvents:UIControlEventTouchUpInside]; 

    [[self view] addSubview:[self datePicker]]; 
    [[self view] addSubview:btnSelect]; 

    [NSTimer scheduledTimerWithTimeInterval:0.3 target:self 
     selector:@selector(timerFireMethod:) userInfo:nil repeats:NO]; 

    [super viewDidLoad]; 
} 

- (void)viewDidUnload { 
    [self setDatePicker:nil]; 
    [super viewDidUnload]; 
} 

#pragma mark - 
#pragma mark Timer methods 

- (void)timerFireMethod:(NSTimer *)theTimer { 
    NSDate *now = [[NSDate alloc] init]; 
    [[self datePicker] setDate:now animated:YES]; 
    [now release]; 
    [theTimer invalidate]; 
} 

#pragma mark - 
#pragma mark Control actions 

- (void)datePicker_ValueChanged:(id)sender { 
    [[Model sharedModel] setDateCache:[[self datePicker] date]]; 
} 

- (void)btnSelect_Pressed:(id)sender { 
    NSString *selected = (NSString *)[[self datePicker] date];; 
    NSString *msg = [[NSString alloc] initWithFormat: 
     @"The date and time you selected is: %@", selected]; 
    UIAlertView *alert = [[UIAlertView alloc] 
       initWithTitle:@"Date and Time Selected" 
       message:msg 
       delegate:nil 
      cancelButtonTitle:@"Yes, I did" 
      otherButtonTitles:nil]; 
    [msg release]; 
    [alert show]; 
    [alert release]; 
} 

#pragma mark - 
#pragma mark Memory warning 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
} 

@end 

Je suis un nouveau venu dans le développement de l'iPhone. Donc, toutes les suppositions sur ce que je fais mal? Merci!!

EDIT: La ligne de sortie que j'ai indiquée dans le code l'a provoqué. J'ai oublié de vérifier si la valeur que j'essayais de donner à la date datePicker était nulle. Et c'était le cas, alors c'était pourquoi il s'écroulait.

Répondre

2

Bien que quelque chose ne va pas dans votre utilisation de DatePicker, c'est difficile de savoir avec tout le code que vous avez posté, est-il possible de parcourir le code et de marquer la ligne qui provoque l'exception?

+0

Ok Je suis encore en train de travailler dessus. Merci de vérifier plus tard quand j'aurai plus d'infos. – mk12

+0

Merci pour la réponse rapide :). Je l'ai compris, c'est parce que je n'ai pas vérifié si la date était nulle. – mk12

1

Vous pouvez essayer de changer la signature de votre méthode datePicker_didChange en something like this, mais je ne pense pas que ce soit le problème. Je pense qu'il a quelque chose à voir avec le code à l'intérieur de votre gestionnaire de messages en appelant [[self datePicker] date], puis en appelant NSDate à NSString. Si vous avez besoin d'une chaîne, suivez la Date/Time Formatting Guide.

Il serait probablement utile d'avoir une trace de pile lisible par un humain. Tapez "bt" ou "backtrace" à partir de la console GDB. J'espère que ça aide :)

+1

Merci, mais je l'ai déjà résolu. La chose chaîne/date n'était pas le problème, bien que j'ai décidé de changer cela pour utiliser un NSDateFormatter. Merci! – mk12

Questions connexes