【问题标题】:NSUserDefaults crashes consistently in iPhone SimulatorNSUserDefaults 在 iPhone 模拟器中持续崩溃
【发布时间】:2009-08-26 03:14:30
【问题描述】:

在我开始之前,我会坦率地承认这是我的代码中的某些东西,但导致它的原因并不是很明显。

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

我可以通过单击一个按钮,然后连续单击取消 3 次,然后单击该按钮第四次来始终使应用程序崩溃。从 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 的新手,我确信有更好的方法来做事,我愿意接受建议。

【问题讨论】:

    标签: iphone nsuserdefaults


    【解决方案1】:

    [按钮发布日期];

    你不能释放你没有分配或保留的东西。

    【讨论】:

    • 太棒了!删除 [buttonDate release] 似乎确实做到了。
    猜你喜欢
    • 2011-05-16
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2012-01-04
    • 2017-08-22
    • 2012-02-21
    • 2011-03-20
    • 2011-05-26
    相关资源
    最近更新 更多