-(void)login{
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"login" ofType:@"plist"];
NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
[plistDict setObject:@"si" forKey:@"stato"];
[plistDict writeToFile:path atomically: YES];
}
在iOS模拟器中,plist已正确编写,但当我尝试在我的iPhone上编写.plist时,它不起作用。我想这是因为错误的.plist路径。 iOS设备是否使用不同的路径?
答案 0 :(得分:5)
首先,您必须检查文档目录中是否存在该文件。如果它不存在,那么您可以将其复制到文档目录。你可以这样做
-(void)login{
BOOL doesExist;
NSError *error;
NSString *filePath= [[NSBundle mainBundle] pathForResource:@"login" ofType:@"plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString * path =[[NSString alloc] initWithString:[documentsDirectory stringByAppendingPathComponent:@"login.plist"]];
doesExist= [fileManager fileExistsAtPath:path];
if (doesExist) {
NSMutableDictionary* plistDict=[[NSMutableDictionary alloc] initWithContentsOfFile:path];
}
else
{
doesExist= [fileManager copyItemAtPath:filePath toPath:path error:&error];
NSMutableDictionary* plistDict=[[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
}
[plistDict setObject:@"si" forKey:@"stato"];
[plistDict writeToFile:path atomically: YES];
}
答案 1 :(得分:2)
您无法写入[NSBundle mainBundle]位置。为了像plist一样写文件,你应该保存在documents文件夹中,这样:
NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *filePathToSave = [arrayPaths objectAtIndex:0];
如果plist是您应用的一部分,我会建议您在第一次启动时使用相同的filePathToSave
将其复制到文档文件夹,因此您将始终在那里查看它,两者都是阅读或保存。
答案 2 :(得分:1)
这是一个很大的错误,因为主捆绑只是可读的,只能在App Bundle的编译时编写。 App Bundle位于一个单独的位置,而应写入磁盘的数据应放在沙箱的Documents,Temporary或Library文件夹中。
要获得更多理解,请阅读官方File System Programming Guide 你需要知道的一切都写在那里 您也可以写入子文件夹,在与iTunes或iCloud同步时,您应该在备份方面选择上述3个主目录。例如,tmp文件夹中的内容不会被备份。
答案 3 :(得分:0)
您无法在iOS设备上写入mainBundle。您必须将文件保存到目录并在那里进行修改。
答案 4 :(得分:0)
只是为了将答案带入现代世界 - 你应该真正使用基于URL的方法来获取目录:
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSURL *URLForDocumentsDirectory = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]