NSUserDefaults последовательно вылетает в iPhone Simulator - PullRequest
1 голос
/ 26 августа 2009

Прежде чем я начну, я свободно признаю, что это что-то в моем коде, но не очевидно, что это вызвало.

Я храню один логический и четыре объекта 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, я уверен, что есть лучшие способы сделать что-то, я открыт для предложений.

1 Ответ

0 голосов
/ 26 августа 2009

[buttonDate release];

Вы не можете освободить то, что не выделяли или не сохраняли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...