在我开始之前,我会自由地承认它是我的代码中的一些内容,但并不是明显的原因是什么导致了它。
我在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的新手,我确信有更好的方法可以做事,我愿意接受建议。
答案 0 :(得分:0)
[buttonDate release];
您无法发布未分配或保留的内容。