Xcode: недопустимый параметр, не удовлетворяющий - программирование
Подтвердить что ты не робот

Xcode: недопустимый параметр, не удовлетворяющий

Я продолжаю сталкиваться с довольно неприятной ошибкой в ​​Xcode после реализации выбора даты. Ошибка в отладчике: "Завершение приложения из-за неотображенного исключения" NSInternalInconsistencyException ", причина:" Недопустимый параметр, не удовлетворяющий: date "

Я уже часами просматриваю свой код и не могу найти проблему. Может быть, потому, что я не проверяю нуль, нет даты при первом запуске приложения и его запуске, что может привести к сбою. Если да, то как я могу проверить нуль в этом коде? Я все еще очень новичок в программировании, любая помощь будет очень оценена. Вот код:

#import "DatePickerViewController.h"


@implementation DatePickerViewController
@synthesize datePicker;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
    // Initialization code
    }
    return self;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
    // Release anything that not essential, such as cached data
}


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UILocalNotification *localNotif = [[UILocalNotification alloc] init];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"mm'/'dd'/'yyyy"];

    NSDate *eventDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"DatePickerViewController.selectedDate"];

    localNotif.fireDate = [eventDate dateByAddingTimeInterval:-13*60*60];
    localNotif.timeZone = [NSTimeZone defaultTimeZone];


    localNotif.alertBody = @"Tomorrow!";

    localNotif.alertAction = nil;

    localNotif.soundName = UILocalNotificationDefaultSoundName;
    localNotif.applicationIconBadgeNumber = 0;
    [[UIApplication sharedApplication]presentLocalNotificationNow:localNotif];    

    return YES;
}


- (void)viewDidLoad {
    NSDate *storedDate = [[NSUserDefaults standardUserDefaults] 
                  objectForKey:@"DatePickerViewController.selectedDate"];

    [self.datePicker setDate:storedDate animated:NO];
}

- (IBAction)dateChanged:(id)sender {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    NSDate *selectedDate = [self.datePicker date];

    [defaults setObject:selectedDate forKey:@"DatePickerViewController.selectedDate"];
}
4b9b3361

Ответ 1

Вы не проверяете, является ли дата нулевым, прежде чем использовать ее, например,

(void)viewDidLoad {

    NSDate *storedDate = [[NSUserDefaults standardUserDefaults] 
                      objectForKey:@"DatePickerViewController.selectedDate"];

    // add this check and set
    if (storedDate == nil) {
        storedDate = [NSDate date];
    }
    // ---
    [self.datePicker setDate:storedDate animated:NO];
}

Ответ 2

Я обнаружил, что способ отладки может помочь вам отладить, где произошло исключение, и может помочь кому-то отладить исключение.

  1. перейти к точке останова navigate to breakpoint

  2. Нажмите кнопку добавления и выберите исключение Точка останова Click the add button, and choose exception Breakpoint

  3. Добавить точку останова и сделать тип исключения для Objective C enter image description here

  4. Запустите код Он остановится на линии, где произойдет авария!

Надеюсь, это поможет ~