2013-07-10 38 views
3

我有一个plist(NSDictionary),我打算可以通过用户数据输入进行更改。这是我所做的。writeToFile:自动:不适用于iOS 6.1.3?

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不是。不过,我使用我的开发者帐户在两台设备上进行密码设置。谁能帮我?否则任何人都可以指向我一个新的解决方案?

+0

类似的问题:http://stackoverflow.com/questions/3460016/nsdictionary-writetofile –

+1

此相关的问题看起来有关 - http://stackoverflow.com/questions/6005544/writetofile-working-in-sim - 但不是在设备上 –

+0

如果它在jail-broken设备上工作,但不是非越狱设备,我想知道你在写什么文件。它是'Documents'文件夹吗?它不能是软件包或应用程序沙箱外的任何地方。 – Rob

回答

3

尝试使用

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

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

+0

是的,我发现了这个问题。我直接写了资源路径。但在越狱设备上是否允许?我可以通过iFile查看我刚刚在程序中写入的文件。 – zyl1024

+1

@ zyl1024它适用于越狱设备和模拟器,但不适用于非越狱设备。不要写入包中。写入'Documents'文件夹。 – Rob

+0

@Rob谢谢。这几天我一直困惑不解。 – zyl1024

2

如果您已完成此操作,我无法从您的代码中看到,但您的path需要是沙盒应用程序目录。

NSArray* pathList = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); 
NSString* path = [[NSString alloc] initWithFormat:@"%@", [pathList objectAtIndex:0]]; 
+0

是的,问题在于路径。谢谢你指出。 – zyl1024