NSFileManager无法创build文件
我有这个代码。 此代码不会在Document目录中创build一个文件,我不知道为什么。 任何人都可以看到我失踪。 “数据”字典有我所需要的,但是当涉及到writeToFile:它不会发生,因为没有创build文件。 在我的其他应用程序中也有相同的代码工作,我肯定错过了一些东西。
- (void)addBookmark{ NSFileManager *fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath: [self filePathOfBookmarks]]) { [self filePathOfBookmarks]; } NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]]; if ([fileManager fileExistsAtPath: [self filePathOfBookmarks]]) { data = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]]; } else { // If the file doesn't exist, create an empty dictionary data = [[NSMutableDictionary alloc] init]; } NSMutableDictionary *firstOne = [NSMutableDictionary dictionary]; [firstOne setObject:@"one" forKey:@"name"]; [firstOne setObject:@"two" forKey:@"call"]; [firstOne setObject:@"twoandhalf" forKey:@"email"]; [firstOne setObject:@"four" forKey:@"description"]; [data setObject:firstOne forKey:@"ID"]; [data writeToFile: [self filePathOfBookmarks] atomically:YES]; NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]]; NSLog(@"file content %@",savedStock); } - (NSString *) filePathOfBookmarks { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docDirectory = [paths objectAtIndex:0]; return [docDirectory stringByAppendingPathComponent:@"favourites"]; }
NSLog(@"%@",[self filePathOfBookmarks]);
这返回:
/ Users / spire / Library / Application Support / iPhone Simulator / 5.1 / Applications / 40CAA37F-6477-4101-A142-D4797748ABD9 / Documents / Favorites
看到下面的代码,它从我身边完美的工作。 您刚刚提到filePathOfBookmarks方法中的目录不是确切的文件名。 我可以将数据保存在favourites.txt文件中。
你也可以参考下面的链接了解更多有关iOS文件处理的信息
1) 文件保存 – 加载/使用文件目录存储文件
2) iPhone文件系统
- (void)addBookmark{ NSFileManager *fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath: [self filePathOfBookmarks]]) { [self filePathOfBookmarks]; } NSMutableDictionary *data;// = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]]; if ([fileManager fileExistsAtPath: [self filePathOfBookmarks]]) { data = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]]; } else { // If the file doesn't exist, create an empty dictionary data = [[NSMutableDictionary alloc] init]; } NSMutableDictionary *firstOne = [NSMutableDictionary dictionary]; [firstOne setObject:@"one" forKey:@"name"]; [firstOne setObject:@"two" forKey:@"call"]; [firstOne setObject:@"twoandhalf" forKey:@"email"]; [firstOne setObject:@"four" forKey:@"description"]; [data setObject:firstOne forKey:@"ID"]; [data writeToFile: [self filePathOfBookmarks] atomically:YES]; NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]]; NSLog(@"file content %@",savedStock); } - (NSString *) filePathOfBookmarks { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docDirectory = [paths objectAtIndex:0]; return [docDirectory stringByAppendingPathComponent:@"favourites.txt"]; }
有些代码对我来说没有意义。
这不会做任何事情:
if (![fileManager fileExistsAtPath: [self filePathOfBookmarks]]) { [self filePathOfBookmarks]; }
然后你用你的书签文件内容初始化你的数据对象 – 但是在这一点上有可能文件不存在:
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];
您可以简单地省略上面的两个代码块,因为您之后再次检查:
if ([fileManager fileExistsAtPath: [self filePathOfBookmarks]]) { data = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]]; } else { // If the file doesn't exist, create an empty dictionary data = [[NSMutableDictionary alloc] init]; }
这是有道理的。 但是,如果省略前两个代码块,请确保声明数据对象:
NSMutableData *data;
然后,将firstOne对象设置为数据字典。 这似乎很好(虽然使用此代码,从现有的书签文件加载的数据之前根本不使用)。
编写你的数据字典似乎也很好:
[data writeToFile: [self filePathOfBookmarks] atomically:YES];
当然提供,你的方法filePathOfBookmarks返回一个有效的文件名。
该方法然而返回一个目录,而不是一个文件。 添加一个像这样的后缀:
return [docDirectory stringByAppendingPathComponent:@"favorites.plist"];
使用检查文件path的有效性
NSLog(@"%@",[self filePathOfBookmarks]);
在写入文件之前。
也试试
NSLog(@"%@",data);
在写它之前看看你的字典包含了什么。
如果仍然无法正常工作,请重新发布。