【问题标题】:writing NSDictionary to plist in my app bundle将 NSDictionary 写入我的应用程序包中的 plist
【发布时间】:2010-03-23 17:34:45
【问题描述】:

我正在尝试将 NSDictionary 写入 plist,但是当我打开 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];

【问题讨论】:

    标签: iphone objective-c cocoa plist nsdictionary


    【解决方案1】:

    Johan 是对的——您不能修改应用的捆绑包。保存字典的位置有两个不错的选择:文档目录,当用户同步他们的设备时由 iTunes 备份;或未备份的缓存目录。如果您不需要备份数据,请将其放入缓存中,以免减慢同步速度。您可以像这样获取目录路径:

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

    【讨论】:

    • 我认为这可能需要额外的信息,因为存在文档共享。来自 Apple:“如果您不想与用户共享文件,请将它们放在应用程序的 Library 目录中。如果标准 Library 子目录都不合适,请在 Library 目录中创建一个私有目录,并为其命名应用程序的包 ID。然后,您可以使用该目录来存储您的应用程序私有的任何文件。"
    【解决方案2】:

    它没有被保存,因为您无法写入应用程序的捆绑包。将您的文件保存在其他地方,例如在文档文件夹中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多