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

我不断收到该错误。我已经将它跟踪到了违规类DatePickerViewController,因为当我没有将它包含在UITabBarController中时,它不会崩溃。整个项目虽然编译好。这里的DatePickerViewController:iPhone开发 - 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 

我很新的iPhone开发。所以我猜错了什么?谢谢!!

编辑:我在代码中指出的排行是造成它。我忘了检查我试图设置datePicker日期的值是否为零。它就是这样,所以这就是它崩溃的原因。

回答

2

那么在您使用DatePicker时,somethign是错误的,它很难找出您发布的所有代码,是否可以逐步执行代码并标记导致异常被引发的行?

+0

好吧,我仍然在努力... ..请稍后再回来,当我有更多的信息。 – mk12 2009-08-19 15:13:56

+0

感谢您的快速回答:)。我想清楚了,这是因为我没有检查日期是否为零。 – mk12 2009-08-19 15:31:22

1

你可以尝试改变你的datePicker_didChange方法签名到something like this,但我真的不认为这是问题所在。我认为这与你的消息处理程序中的代码有关,它调用[[self datePicker] date],然后将NSDate转换为NSString。如果您需要字符串,请按照Date/Time Formatting Guide

这可能会帮助,如果有一个人类可读的堆栈跟踪。从GDB控制台输入“bt”或“backtrace”。希望有所帮助:)

+1

谢谢,但我已经解决了它。字符串/日期事情不是问题,但我决定改变它使用NSDateFormatter。谢谢! – mk12 2009-08-19 16:14:10