NSUserDefaults在iPhone模拟器中一直崩溃

时间:2009-08-26 03:14:30

标签: iphone nsuserdefaults

在我开始之前,我会自由地承认它是我的代码中的一些内容,但并不是明显的原因是什么导致了它。

我在NSUserDefaults中存储了一个布尔值和四个NSDate对象。我有一个视图将信息加载到控件中:boolean到一个开关中,4个日期值作为格式化的值加载为4个按钮上的标签。如果用户点击一个按钮,我会切换到一个带有UIDatePicker的新视图,该UIDatePicker根据单击的按钮预先加载NSUserDefaults的完整日期。第二个视图有两个按钮:取消和设置。如果您选择取消,我们会切换回第一个视图。如果选择设置UIDatePicker中的值存储在NSUserDefaults中,则更新所选按钮的标签,然后切换回第一个视图。

我可以通过单击按钮然后单击取消连续三次,然后第四次单击该按钮来始终使应用程序崩溃。当从NSUserDefaults中检索值时,它在objc_msgSend中崩溃。

这是涉及的3个功能。

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

    switch ([sender tag]) {
        case 1000:
            pressedString = kStartTime1Key;
            pressedButton = start1;
            break;
        case 1001:
            pressedString = kEndTime1Key;
            pressedButton = end1;
            break;
        case 1002:
            pressedString = kStartTime2Key;
            pressedButton = start2;
            break;
        case 1003:
            pressedString = kEndTime2Key;
            pressedButton = end2;
            break;
        default:
            break;
    }

    buttonDate = [defaults objectForKey:pressedString];
    if (buttonDate == nil) buttonDate = [NSDate date];
    [datePicker setDate:buttonDate animated:NO];
    [buttonDate release];

    self.view = datePickerView;
}

- (IBAction) savePressed {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSDate *selected = [datePicker date];

    [defaults setObject:selected forKey:pressedString];
    [pressedButton setTitle:[self parseDate:selected] forState:UIControlStateNormal];

    self.view = settingsView;
}

- (IBAction) cancelPressed {
    self.view = settingsView;
}

作为iPhone和Obj-C的新手,我确信有更好的方法可以做事,我愿意接受建议。

1 个答案:

答案 0 :(得分:0)

  

[buttonDate release];

您无法发布未分配或保留的内容。