2010-10-26 100 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参考也将释放。你需要保留它。

然后显然在某个时候你需要释放它。