Прежде чем я начну, я свободно признаю, что это что-то в моем коде, но не очевидно, что это вызвало.
Я храню один логический и четыре объекта NSDate в NSUserDefaults. У меня есть представление, которое загружает информацию в элементы управления: логическое значение в переключатель, и 4 значения даты загружаются в виде метки на 4 кнопки в виде форматированных значений. Если пользователь нажимает на кнопку, я переключаюсь на новое представление с помощью UIDatePicker, который предварительно загружен с полной датой из NSUserDefaults, основанной на нажатой кнопке. Второй вид имеет две кнопки: отменить и установить. Если вы решите отменить, мы вернемся к первому виду. Если вы выбираете установить значение из UIDatePicker, хранящееся в NSUserDefaults, метка выбранной кнопки обновляется, и мы переключаемся на первое представление.
Я могу последовательно аварийно завершить работу приложения, нажав кнопку, затем три раза подряд нажав кнопку «Отмена», а затем четвертый раз нажав кнопку. Сбой в objc_msgSend при получении значения из NSUserDefaults.
Вот три задействованные функции.
- (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, я уверен, что есть лучшие способы сделать что-то, я открыт для предложений.