1

当我尝试这段代码时:

if ([[NSFileManager defaultManager] fileExistsAtPath:@"~/Library/Application Support/Staying Afloat/stats/static-stats.plist"] == NO) {
    NSMutableDictionary* tempDict = [[NSMutableDictionary alloc]initWithObjectsAndKeys:
                                     [[NSString alloc] initWithString:@"0"],@"completedGames",
                                     [[NSString alloc] initWithString:@"0"],@"floatsCollected",
                                     [[NSString alloc] initWithString:@"0"],@"sec",
                                     [[NSString alloc] initWithString:@"0"],@"subScore",
                                     [[NSString alloc] initWithString:@"0"],@"highScore",
                                     [[NSString alloc] initWithString:@"0"],@"longestSec", nil];

    [tempDict writeToFile:@"~/Library/Application Support/Staying Afloat/stats/static-stats.plist" atomically:YES];

    NSLog(@"written file");

}

这与输出

2012-04-14 19:15:10.009 Staying Afloat[3227:9c07] written file

所以循环已经运行,但文件没有被写入?谁能指出我将 plist 保存到非本地化位置的正确方向?

编辑:这是为 mac

4

4 回答 4

6

您需要-(NSString *)stringByExpandingTildeInPath在编写时使用扩展路径并检查文件是否存在。

编辑:阅读writeToFile:automaticallyNSDictionary 文档中的方法。它说

如果 path 包含波浪号 (~) 字符,则必须在调用此方法之前使用 stringByExpandingTildeInPath 扩展它。

所以只需做类似的事情

[tempDict writeToFile:[[NSString stringWithString:@"~/Library/Application Support/Staying Afloat/stats/static-stats.plist"] stringByExpandingTildeInPath] atomically:YES];
于 2012-04-14T07:38:13.313 回答
1

首先你不能只写:

[tempDict writeToFile:@"~/Library/Application Support/Staying Afloat/stats/static-stats.plist" atomically:YES];

NSLog(@"written file");

因为您不检查文件是否真的成功写入。

你应该写:

if([tempDict writeToFile:@"~/Library/Application Support/Staying Afloat/stats/static-stats.plist" atomically:YES]) {
    NSLog(@"written file");
} else {
    NSLog(@"file not written");
}

WriteToFile 方法返回一个布尔值。

于 2012-04-14T07:40:50.547 回答
0

我总是使用 NSUserDefaults 来为你处理所有事情,比如用户偏好或在运行之间存储应用程序状态。在我的脑海中,我建议您没有正确的权限来编写 plist,如果您不小心破坏了操作系统的重要键和值,会发生什么?看一下

在 iPhone MVC 应用程序中处理用户首选项的最佳实践?

于 2012-04-14T07:46:57.637 回答
0

你确定-writeToFile:atomically:退货YES

于 2012-04-14T08:16:44.463 回答