2

在下面的代碼,我嘗試從一個plist中讀取數據:EXC_BAD_ACCESS試圖讀取一個NSArray

-(void)readPreferences 
    { 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     NSMutableArray * myAppDefaults = [defaults mutableArrayValueForKey:@"LastList"]; 
     myCustomObject * savedObject; 
     NSUInteger i; 
     for (i = 0; i < [myAppDefaults count]; i++) 
     { 
      NSArray * thisArray = [myAppDefaults objectAtIndex:i]; 

      savedObject.value1 = [thisArray objectAtIndex:0]; 
      savedObject.value2 = [thisArray objectAtIndex:1]; 
      savedObject.value3 = [thisArray objectAtIndex:2]; 
      savedObject.value4 = [myAppDefaults objectAtIndex:3]; 

      [objectsArray addObject:savedObject]; 
     } 

    } 

不知怎的,當我嘗試設置「savedObject.value1」,我得到一個「EXC_BAD_ACCESS」錯誤。

我意識到這很可能是基本的內存管理,或者指針/對象的一種混淆,但我仍然在學習。 我希望有人能幫助我。 致以問候 Sjakelien

回答

5

您在設置value1屬性時尚未初始化savedObject。您將需要添加:

savedObject = [[myCustomObject alloc] init]; 
for循環前

,以便它是一個有效的對象,你可以設置屬性。

0

我沒有在NSUserDefaults看到mutableArrayValueForKey。 嘗試arrayForKey:而不是,那會給你NSArray*

似乎從defaults返回的值是不可變的(當你從文件中獲取東西時有意義)。

檢查從mutableArrayValueForKey返回的值,我懷疑它是零。

再看看你的代碼沒有多大意義。 在任何時候你都沒有分配savedObjects,但是你反覆將它插入到數組中。 即使您提取值的方式似乎也不正確。

我會建議看看蘋果文檔中的NSUserDefautls參考,它有基本用法的例子。

+0

根據文檔,mutableArrayValueForKey是「可用於iPhone OS 2.0及更高版本」。 無論如何,返回的值不是零。它包含12個對象。我想這就是問題所在。 savedObject.value1是一個NSString,而objectAtIndex:0是一個對象。也許我應該以某種方式轉換它? – Sjakelien 2009-06-21 14:58:58

+0

所有NSStrings(即NSString對象)都是對象。 – 2009-06-21 20:46:30