writeToFile在iphone上失败但在模拟器上运行

cli*_*bon 1 iphone

NSString *myfile = [[NSBundle] mainBundle] pathForResource:@"fileName" ofType:@"plist"];    
NSMutableArray *mydata= [[NSMutableArray alloc] initWithContentsOfFile:myfile];

/* code to modify mydata */

[mydata writeToFile:myfile atomically:YES]
Run Code Online (Sandbox Code Playgroud)

在模拟器的情况下'fileName.plist'被修改但是在iphone设备文件保持不变的情况下.也没有例外.

以上代码是否可以在iphone和模拟器上正常工作?

当我将鼠标悬停在'mydata'上时,我也会在调试器中看到模拟器和设备的不同值.在模拟器的情况下,我看到例如'5个对象'但是在它显示的实际设备的情况下'{(int)[$VAR count]}'.这可能与文件没有被写入有关吗?

Ken*_*ker 5

您无法写入bundle的资源目录中的文件.最重要的是你不想要,因为更新你的应用程序时会覆盖任何更改.文档目录在各个版本中都存在,并且(我相信)它是通过itunes备份的.

这是一个片段,用于检查文档目录中的plist.如果文件不存在,则将资源中的plist复制到文档目录中.

BOOL success;
NSFileManager* fileManager = [NSFileManager defaultManager]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"score.plist"];
success = [fileManager fileExistsAtPath:writableDBPath];
if (success) return success;
// The writable database does not exist, so copy the default to the appropriate location.
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"score.plist"]];
success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; 
return success;
Run Code Online (Sandbox Code Playgroud)