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

계속 오류가 발생합니다. 나는 그것이 UITabBarController에 포함시키지 않을 때, 크래쉬하지 않기 때문에 문제가되는 클래스 인 DatePickerViewController를 추적했다. 전체 프로젝트가 잘 컴파일됩니다. 여기에 DatePickerViewController가 있습니다 :iPhone dev - 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의 날짜를 설정하려고 시도한 값이 nil인지 확인하는 것을 잊었습니다. 그리고 그것은 그것이 충돌하는 이유입니다.

답변

2

게시자가 게시 한 모든 코드로 알아 내기가 힘든 DatePicker를 사용하는 데 문제가 있습니다. 코드를 단계별로 실행하고 예외가 발생하는 행을 표시 할 수 있습니까?

+0

좋아, 나는 아직도 그것에 대해 노력하고있어 .. 나중에 다시 확인해주세요. – mk12

+0

빠른 답변 주셔서 감사합니다 :). 나는 그것을 알아 냈다. 왜냐하면 나는 그 날이 무조건한지를 확인하지 않았기 때문이었다. – mk12

1

datePicker_didChange 메서드 서명을 something like this으로 변경해 볼 수도 있지만 그게 문제라고는 생각하지 않습니다. 제 생각에는 메시지 처리기 내부의 코드와 [[self datePicker] date]을 호출 한 다음 NSDateNSString으로 전송하면됩니다. 문자열이 필요한 경우 Date/Time Formatting Guide을 따르십시오.

사람이 읽을 수있는 스택 추적이 있다면 도움이 될 것입니다. GDB 콘솔에서 "bt"또는 "backtrace"를 입력하십시오. 희망이 도움이 :)

+1

고마워,하지만 이미 해결 했어. NSDateFormatter를 사용하도록 변경하려고했지만 문자열/날짜 문제는 문제가 아니 었습니다. 감사! – mk12

관련 문제