2010-10-26 103 views
1

我試圖在iPhone應用程序中保存並讀回一些存儲爲NSStrings的應用程序設置,並且遇到了一些麻煩。從NSArray獲取NSString

的代碼保存的樣子:

NSMutableArray *array = [[NSMutableArray alloc] init]; 
    [array addObject:accountID]; 
    ... 
    [array writeToFile:[self dataFilePath] atomically:YES]; 
    [array release]; 

和代碼閱讀的樣子(帳戶是一個NSString *):

NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];   
    accountID = [array objectAtIndex:0]; 
    ...      
    [array release]; 
    NSLog(@"Loading settings for: %@", accountID); 

的讀代碼,因爲數組後拋出異常發佈accountID變量也似乎已經發布(移動NSLog調用之前釋放數組工作正常)。所以我猜我正在創建對數組的引用,而不是將數組中包含的實際字符串拉出來。我嘗試了幾件事情來創建使用數組內容的新字符串,但沒有任何運氣。

回答

2

你猜是在右邊的行,雖然你有一個引用數組的第0個元素而不是數組。該數組由指向NSString對象的指針組成。當數組被釋放時,字符串將被釋放。

您需要保留您使用E/G元素/

NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];   
NSString* accountID = [[array objectAtIndex:0]retain]; 
...      
[array release]; 
NSLog(@"Loading settings for: %@", accountID); 
1

嘗試[accountID retain]鬆開陣列

2

當您鬆開陣列的帳戶ID參考也將釋放。你需要保留它。

然後顯然在某個時候你需要釋放它。