我在网站上发现了几个与有类似问题的人有关的问题,但我仍然无法解决我的问题。这是事情:无法写入plist文件
我正在制作一个包含两个plist文件的iOS应用程序。当用户第一次打开应用程序时,应用程序负责将这两个文件移动到Documents目录。我知道这段代码有效,因为我随后可以从Documents目录路径中的每个文件中读取。但是,由于明显的未知原因,我无法写信给他们中的任何人。下面是我用它来写第一plist文件中的代码:
+ (void)insertNewElementWith:(NSArray *)objects andKeys:(NSArray *)keys {
NSString *filePath = [self returnPathForFirstPlistFile];
NSMutableDictionary *contentOfFirstPlistFile = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];
[contentOfFirstPlistFile setObject:dictionary forKey:[NSNumber numberWithInt:[contentOfFirstPlistFile count]]];
[contentOfFirstPlistFile writeToFile:filePath atomically:YES];
[dictionary release];
}
returnPathForFirstPlistFile
确实工作,因为contentOfFirstPlistFile
包含{ }
而非null
。然而,任何人都可以向我解释为什么它会一直返回{ }
,即使上述方法已被多次调用。
更新
这里是我使用的文件放置在文件目录中的代码。 placePlistsInDocumentsDirectory
是只有在用户通过应用程序登录时调用,所以这只会发生一次。
+ (NSString *)returnPathForFirstPlistFile {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"First.plist"];
return filePath;
}
+ (NSString *)returnPathForSecondPlistFile {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSLog(@"%@", [paths objectAtIndex:0]);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"Second.plist"];
return filePath;
}
+ (void)placePlistsInDocumentsDirectory {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *firstPlistPath = [self returnPathForFirstPlistFile];
NSString *secondPlistPath = [self returnPathForSecondPlistFile];
if (![fileManager fileExistsAtPath:firstPlistPath]) {
NSError *error;
NSString *bundle = [[NSBundle mainBundle] pathForResource:@"First" ofType:@"plist"];
[fileManager copyItemAtPath:bundle toPath:firstPlistPath error:&error];
}
if (![fileManager fileExistsAtPath:secondPlistPath]) {
NSError *error;
NSString *bundle = [[NSBundle mainBundle] pathForResource:@"Second" ofType:@"plist"];
[fileManager copyItemAtPath:bundle toPath:secondPlistPath error:&error];
}
}
谢谢,但仍然无法正常工作。当将一个BOOL变量应用到'writeToFile'行时,即使我已经用NSString替换了NSNumber,它也会返回负值。我也尝试过使用数组,但这也不起作用。 – wstr
如果您在添加“dictionary”之前和之后登录'contentOfFirstPlistFile',您会看到什么? – jrturton
之前的空字典和内容之后的字典。 – wstr