我正在尝试保存并回读在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调用正常工作)。所以我猜我正在创建一个对数组的引用,而不是拉出数组中包含的实际字符串。我尝试了几个使用数组内容创建新字符串但没有任何运气的东西。
答案 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]