我使用下面的方法从我的plist中获取一个数组,然后将某个值增加1,然后保存它。但是我记录了数组,每次实际上值都不会上升。
在我的plist中,我有一个数组,并且在这个数字值中,每个都设置为0.所以每次我再次运行它时它会回到0似乎。
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"Words.plist"];
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:finalPath];
NSMutableArray *errors = [dict objectForKey:[NSString stringWithFormat:@"Errors%d.%d", [[stageSelectionTable indexPathForSelectedRow] section] +1, [[stageSelectionTable indexPathForSelectedRow] row] +1]];
int a = [[errors objectAtIndex:wordIndexPath] intValue];
a += 1;
NSNumber *b = [NSNumber numberWithInt:a];
[errors replaceObjectAtIndex:wordIndexPath withObject:b];
[errors writeToFile:finalPath atomically:YES];
答案 0 :(得分:4)
您只能写入documents-folder中的文件。 你不能写信给你的包!
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"Namelist.plist"];
您可以使用NSFilemanager
将Plist文件复制到documents-folder。
获取文件的路径:
- (NSString *)filePath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"MyFile.plist"];
return filePath;
}
如果文件不存在,则复制该文件:
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:[self filePath]]) {
NSString *path = [[NSBundle mainBundle] pathForResource:@"MyFile" ofType:@"plist"];
[fileManager copyItemAtPath:path toPath:[self filePath] error:nil];
}
现在您可以将 NSDictionary
写入文档目录:
[dict writeToFile:[self filePath] atomically:YES];
但你真的需要在dict中更新数组!
答案 1 :(得分:2)
您正在将数组写入磁盘,而不是数组源自的字典:
[dict writeToFile:finalPath atomically:YES];
此外,在保存之前,您需要将Errors%d.%d
对象替换为更新的对象:
[dict setObject:errors forKey:/* your formatted key*/];
最后,正如@ mavrick3指出的那样,您无法将文件保存到您的包中,只能保存到应用程序的文档目录中。