2009-08-19 7 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 
)

Ich bekomme immer diesen Fehler. Ich habe es auf die anstößige Klasse DatePickerViewController aufgespürt, denn wenn ich das nicht in den UITabBarController einfüge, stürzt es nicht ab. Das ganze Projekt kompiliert sich aber gut. Hier ist DatePickerViewController:iPhone dev - NSInternalInconsistencyException Hilfe?

/* 
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 

Ich bin ziemlich neu in iPhone Entwicklung. Also irgendwelche Vermutungen darüber, was ich falsch mache? Vielen Dank!!

EDIT: Die angebrochene Zeile, die ich im Code darauf hingewiesen habe, hat es verursacht. Ich habe vergessen zu prüfen, ob der Wert, auf den ich das datePicker-Datum setzen wollte, null war. Und es war so, deshalb stürzte es.

Antwort

2

Nun etwas falsch ist in Ihrer Verwendung des DatePicker, seine Art schwer mit all dem Code, den Sie veröffentlicht, ist es möglich, Sie können durch den Code und markieren Sie die Zeile, die die Ausnahme ausgelöst wird zu werfen?

+0

Ok Ich arbeite immer noch daran .. Bitte überprüfen Sie später wieder, wenn ich mehr Informationen habe. – mk12

+0

Danke für die schnelle Antwort :). Ich habe es herausgefunden, weil ich nicht überprüft habe, ob das Datum Null ist. – mk12

1

Sie könnten versuchen, Ihre Signatur der datePicker_didChange-Methode auf something like this zu ändern, aber ich glaube nicht, dass das das Problem ist. Ich denke, dass es etwas mit dem Code in Ihrem Nachrichtenhandler zu tun hat, der aufruft und dann das NSDate zu einem NSString wirft. Wenn Sie eine Zeichenfolge benötigen, folgen Sie der Date/Time Formatting Guide.

Es würde wahrscheinlich helfen, wenn eine menschenlesbare Stapelspur hätte. Geben Sie "bt" oder "backtrace" von der GDB-Konsole ein. Hoffe, dass hilft :)

+1

Danke, aber ich habe es schon gelöst. Die string/date Sache war nicht das Problem, obwohl ich mich entschieden habe, das zu ändern, um einen NSDateFormatter zu verwenden. Vielen Dank! – mk12