私が始める前に、私のコードには何かがあるとはっきりと認めていますが、何が原因であるのかはっきりと分かりません。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の初心者であることから、もっと良い方法があると確信しています。
恐ろしい! [buttonDate release]を削除するのは間違いないようです。 – c17r