iPhone dev - NSInternalInconsistencyException поможет? - PullRequest
1 голос
/ 19 августа 2009
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:

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

2 голосов
/ 19 августа 2009

Что-то не так в вашем использовании DatePicker, его довольно сложно выяснить с помощью всего того кода, который вы опубликовали, возможно, вы можете пройтись по коду и отметить строку, которая вызывает исключение?

1 голос
/ 19 августа 2009

Вы можете попробовать изменить подпись метода datePicker_didChange на примерно так , но я не думаю, что это проблема. Я думаю, что это как-то связано с кодом внутри вашего обработчика сообщений, вызывающим [[self datePicker] date] и затем приводящим NSDate к NSString. Если вам нужна строка, следуйте Руководству по форматированию даты / времени .

Вероятно, это помогло бы, если бы имелся читаемый человеком стек трассировки. Введите «bt» или «backtrace» из консоли GDB. Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...