2009-08-26 8 views
1

私が始める前に、私のコードには何かがあるとはっきりと認めていますが、何が原因であるのかはっきりと分かりません。iPhone SimulatorでNSUserDefaultsが一貫してクラッシュする

NSUserDefaultsに1つのブール値と4つのNSDateオブジェクトを格納しています。私はコントロールに情報をロードするビューを持っています:ブール値をスイッチに入れ、4つの日付値が4つのボタンのラベルとしてフォーマットされた値としてロードされます。ユーザーがボタンをクリックすると、クリックされたボタンに基づいてNSUserDefaultsから完全な日付がプリロードされたUIDatePickerで新しいビューに切り替わります。 2番目のビューには、キャンセルと設定の2つのボタンがあります。キャンセルを選択すると、最初のビューに戻ります。 setを選択すると、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の初心者であることから、もっと良い方法があると確信しています。

答えて

0

[buttonDate release];

割り当てまたは保存していないものをリリースすることはできません。

+0

恐ろしい! [buttonDate release]を削除するのは間違いないようです。 – c17r

関連する問題