3

我有一个 plist ( NSDictionary),我打算通过用户数据输入来更改它。这是我所做的。

NSString *path = (the path for the plist)
NSMutableDictionary *plistFile = [[NSDictionary dictionaryWithContentOfFile:path] mutableCopy];
[plistFile setObject:(an NSString object) forKey:(an NSString key)];
[plistFile writeToFile:path atomically:YES];

所以这就是我编码的内容。它适用于iPad 3 (new iPad) (iOS 6.1.2)和我的XCode (4.6) simulator (iOS 6). 但是,它不适用于我的iPad mini (iOS 6.1.3). 我发现了最后一步的问题。当我写

BOOL success = [plistFile writeToFile:path atomically:YES];
NSLog(@"%@",@(success));

控制台总是打印 0,这意味着它没有成功。但在我的 iPad 3 和模拟器上,它会打印 1,这意味着成功。

这就是我所能描述的,因为没有抛出异常或其他输出。顺便说一句,我的 iPad 3(它可以在上面运行)已经越狱,但 iPad mini 没有。尽管如此,我还是使用我的开发者帐户在两台设备上进行协同设计。谁能帮我?或者任何人都可以向我指出一个新的解决方案吗?

4

2 回答 2

3

尝试使用

NSError * error = nil;
BOOL success = [plistFile writeToFile:path options:NSDataWritingAtomic error:&error];
NSLog(@"Success = %d, error = %@", success, error);

然后检查发生了什么错误。也许它可以帮助你。而且您只能写入文档目录。您的路径可能会遇到一些麻烦。

于 2013-07-10T11:05:12.283 回答
2

如果您已这样做,我无法从您的代码中看到,但您path需要成为沙盒应用程序目录。

NSArray* pathList = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString* path = [[NSString alloc] initWithFormat:@"%@", [pathList objectAtIndex:0]];
于 2013-07-10T11:13:13.283 回答