如何读取和写入objective-c中的plist文件? (iPhone SDK)

时间:2010-07-01 19:28:28

标签: iphone objective-c

我在读取和写入plist文件时遇到问题。我可以读取数据,但我不能写它..而且,我认为我有一个与此相关的内存管理问题。这是我的代码:

+(NSString *) getSettingString: (NSString *)key
{
 NSString *path = [[NSBundle mainBundle] bundlePath];
 NSString *finalPath = [path stringByAppendingPathComponent:@"FSSettings.plist"];
 NSMutableDictionary* plistDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:finalPath];
 NSString *value =  [plistDictionary objectForKey:key];
 [path release];
 return value;
}

+(void) setSettingString: (NSString *)key value:(NSString *)value
{
 NSString *path = [[NSBundle mainBundle] bundlePath];
 NSString *finalPath = [path stringByAppendingPathComponent:@"FSSettings.plist"];
 NSMutableDictionary* plistDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:finalPath];
 [plistDictionary setObject:value forKey:key];
 [plistDictionary writeToFile:finalPath atomically:YES];
 [path release];
}

3 个答案:

答案 0 :(得分:2)

您正在尝试将plist写回应用程序包中,这是不允许的。您需要将文件写入文档目录。有关如何查找此目录的详细信息,请访问:

http://developer.apple.com/iphone/library/documentation/iphone/conceptual/iphoneosprogrammingguide/StandardBehaviors/StandardBehaviors.html#//apple_ref/doc/uid/TP40007072-CH4-SW11

答案 1 :(得分:1)

如果明确取得资源的所有权,或者调用copy,init,retain方法,则只需释放资源。建设与发展在Xcode中进行分析可以帮助发现这些潜在的内存问题,但足以说,松开对[path release]的调用你不拥有它,因此你不应该发布它。

答案 2 :(得分:0)

bundle是只读的,你应该把文件写在文件目录中。