2009-10-05 52 views
0

該應用程序會將NSMutableArray保存到歸檔中,但沒有問題,但只要嘗試將NSMutableArray加載回新的NSMutableArray @ viewDidLoad,應用程序就會崩潰。我在代碼的最後放置了一個斷點,其中「tempArray = [unarchiver decodeObjectForKey:kDataKey46];」 tempArray正在加載歸檔數組,但是當我通過「for」循環@「[poolListData addObject:testTemp];」 「poolListData」不包含來自「tempArray」的數據。此外,如果我沒有使用中斷點,只是讓應用程序嘗試加載,應用程序將崩潰...你們認爲什麼?無法將已歸檔的NSMutableArray加載到新的NSMutableArray中

謝謝你的時間! 傑夫

NSString *filePath = [self dataFilePath]; 
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) 
{ 
    NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]]; 
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; 

    field1.text = [unarchiver decodeObjectForKey:kDataKey1]; 
    // snip another bunch of fields 
    field37.text = [unarchiver decodeObjectForKey:kDataKey37]; 

    soundOn = [unarchiver decodeBoolForKey:kDataKey38]; 
    soundVolumeSlider.value = [unarchiver decodeDoubleForKey:kDataKey39]; 
    soundVolumeValue = [unarchiver decodeDoubleForKey:kDataKey39]; 
    tempArray = [unarchiver decodeObjectForKey:kDataKey46]; 

    [unarchiver finishDecoding]; 

    for(int i = 0; i < [tempArray count]; i++) 
    { 
    NSData *testTemp = 0; 
    //NSString *temp = [tempArray objectAtIndex:i]; 
    testTemp = [tempArray objectAtIndex:i]; 
    [poolListData addObject:testTemp]; 
    //[poolListData addObjectsFromArray:tempArray]; 
    } 

    /* 
    firstNameTextField.text = field1.text; 
    lastNameTextField.text = field2.text; 
    adressTextField.text = field3.text; 
    emailTextField.text = field4.text; 
    */ 

    [tempArray release]; 
    [unarchiver release]; 
    [data release]; 
} 

回答

3

我認爲這至少部分是內存管理錯誤。調用decodeObjectForKey會返回一個自動釋放對象,所以這是在函數結束時釋放tempArray的錯誤。這將是你的應用程序崩潰的原因。至於poolListData沒有保存unarchived數組的內容,也許你只是忘了初始化它,你試圖將項目添加到一個無數組?

+0

謝謝!!!那是我需要做的 – Jeff 2009-10-06 19:17:20

+0

P.S.殺手圖標! – Jeff 2009-10-06 19:17:54

0

如果你打電話解除封存,並沒有看到任何值,則數組舉行的東西,無法歸檔。我相信UIImage會是你可能在陣列中嘗試和保存的一個例子。你問題的關鍵在於,當你存檔它時,你有什麼類型的tempArray。

+1

如果問題是UIImage,那麼他的代碼會在他存檔時中斷,而不是像他說的那樣處於非存檔階段。 – Kevlar 2009-10-06 05:31:04

+0

它不會中斷。它根本不寫。當我嘗試將UIImage保存爲NSUser默認值時,我已經在實踐中看到了這一點。他們沒有寫出來,你也沒有注意到。 – 2009-10-06 15:12:23