2010-03-23 46 views
9

我想写一个NSDictionary到plist,但是当我打开plist没有数据写入它。 从日志我的路径看起来是正确的,我的代码是非常标准的。 任何想法?写NSDictionary plist在我的应用程序包

NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", @"key3", nil]; 
NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", @"value3", nil]; 
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 

for (id key in dictionary) { 
    NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]); 
} 

NSString *path = [[NSBundle mainBundle] pathForResource:@"FormData" ofType:@"plist"]; 
NSLog(@"path:%@", path); 

[dictionary writeToFile:path atomically:YES]; 

回答

24

Johan是对的 - 你不允许修改你的应用程序捆绑。您有两个很好的选择来保存字典的位置:文档目录,当用户同步设备时由iTunes备份;或未备份的缓存目录。如果您不需要备份数据,请将其放入缓存中,这样您不会减慢同步速度。你可以得到这样的目录路径:

NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

NSString *cachesDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
+3

+1为包括细节。 – alesplin 2010-03-23 22:25:56

+1

我认为这可能需要额外的信息,现在文件共享存在。来自Apple的消息:“如果你不想让文件与用户共享,把它们放到应用程序的Library目录下,如果没有任何标准的Library子目录是合适的,那么在Library目录下创建一个私人目录,并为它指定你的名字应用程序的包ID,然后可以使用该目录来存储任何私人应用程序的文件。“ – 2011-03-31 23:00:29

5

由于无法写入应用程序捆绑包,因此无法保存。例如,将文件另存为文档文件夹。