1

始める前に、それが私のコードの何かであることを自由に認めますが、何が原因であるかは明白ではありません。

1 つのブール値と 4 つの NSDate オブジェクトを NSUserDefaults に格納しています。情報をコントロールにロードするビューがあります。ブール値をスイッチにロードすると、4 つの日付値が 4 つのボタンのラベルとして書式設定された値としてロードされます。ユーザーがボタンをクリックすると、クリックされたボタンに基づいて NSUserDefaults から完全な日付がプリロードされた UIDatePicker を持つ新しいビューに切り替わります。2 番目のビューには、キャンセルと設定の 2 つのボタンがあります。キャンセルを選択すると、最初のビューに戻ります。UIDatePicker から値を設定することを選択すると、NSUserDefaults に保存され、選択したボタンのラベルが更新され、最初のビューに戻ります。

ボタンをクリックしてから 3 回続けて [キャンセル] をクリックし、4 回目のボタンをクリックすると、アプリケーションを一貫してクラッシュさせることができます。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 の初心者なので、もっと良い方法があると確信しています。提案をお待ちしています。

4

1 に答える 1

0

[ボタン日付リリース];

割り当てまたは保持していないものを解放することはできません。

于 2009-08-26T03:44:02.213 に答える