2012-01-20 34 views
16

Tôi tiếp tục gặp phải một lỗi khá khó chịu trong Xcode sau khi triển khai bộ chọn ngày. Lỗi trong trình gỡ lỗi là: "Chấm dứt ứng dụng do ngoại lệ chưa được nắm bắt 'NSInternalInconsistencyException', lý do: 'Tham số không hợp lệ không thỏa mãn: ngày"Xcode: Thông số không hợp lệ không thỏa mãn

Tôi đã xem mã của tôi hàng giờ và không thể tìm thấy vấn đề. Có thể là do tôi không kiểm tra số không, không có ngày đầu tiên ứng dụng cài đặt và khởi chạy, do đó có thể gây ra sự cố. Nếu có, làm thế nào để kiểm tra nil trong mã này? Tôi vẫn còn rất mới trong lập trình, bất kỳ trợ giúp sẽ được nhiều đánh giá cao. Đây là mã số:

#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's 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"]; 
} 

Trả lời

22

Bạn không kiểm tra ngày tháng có rỗng hay không, trước khi sử dụng.

(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]; 
} 
+1

Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn! Bạn đã giúp tôi rất nhiều! – John

Các vấn đề liên quan