簡體   English   中英

NSUserDefaults在iPhone模擬器中始終崩潰

[英]NSUserDefaults crashes consistently in iPhone Simulator

在我開始之前,我將自由地承認這是我的代碼中的某些內容,但是並不清楚原因是什么。

我在NSUserDefaults中存儲一個布爾值和四個NSDate對象。 我有一個視圖,它將信息加載到控件中:布爾值加載到開關中,並且4個日期值作為4個按鈕上的標簽加載為格式化值。 如果用戶單擊按鈕,我將切換到帶有UIDatePicker的新視圖,該視圖已基於單擊的按鈕從NSUserDefaults中預加載了完整日期。 第二個視圖有兩個按鈕:取消和設置。 如果選擇取消,我們將切換回第一個視圖。 如果選擇設置,則將UIDatePicker中的值存儲在NSUserDefaults中,則更新所選按鈕的標簽,然后切換回第一個視圖。

我可以通過單擊一個按鈕,然后連續單擊取消三次,然后單擊第四次單擊來使應用程序持續崩潰。 從NSUserDefaults中檢索值時,它在objc_msgSend中崩潰。

這是其中涉及的三個功能。

  - (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發布];

您無法釋放未分配或保留的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM