从NSArray中获取NSString

时间:2010-10-26 15:48:51

标签: objective-c

我正在尝试保存并回读在iPhone应用程序中存储为NSStrings的一些应用程序设置,并且遇到了一些麻烦。

要保存的代码如下:

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

读取的代码看起来像(accountID是NSString *):

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

读取代码会引发异常,因为在释放数组后,accountID变量似乎也已释放(在释放数组之前移动NSLog调用正常工作)。所以我猜我正在创建一个对数组的引用,而不是拉出数组中包含的实际字符串。我尝试了几个使用数组内容创建新字符串但没有任何运气的东西。

3 个答案:

答案 0 :(得分:2)

释放数组时,也会释放对accountID的引用。你需要保留它。

accountID = [[array objectAtIndex:0] retain];

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

答案 1 :(得分:2)

你猜是在右边的行,尽管你引用了数组的第0个元素而不是数组。该数组由指向NSString对象的指针组成。当数组发布时,字符串将被释放。

您需要保留使用的元素e / g /

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

答案 2 :(得分:1)

在释放数组之前尝试[accountID retain]