plist中的增量编号
Posted
技术标签:
【中文标题】plist中的增量编号【英文标题】:Increment Number in plist 【发布时间】:2012-06-15 17:40:03 【问题描述】:我正在使用下面的方法从我的 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];
【问题讨论】:
有什么错误吗?您是否已经调试过您的应用程序?你知道NSLog()
吗?
没有错误,我使用 NSLog 来跟踪我 plist 中的错误数组。它从 0 递增到 1,但不是从 1 到 2,它似乎恢复到 0,所以大概没有保存,无法解决。
我刚刚发现你犯的错误,请阅读我的回答。
【参考方案1】:
您只能写入文档文件夹中的文件。 您无法写入您的捆绑包!
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"Namelist.plist"];
您可以使用NSFilemanager
将您的 Plist-File 复制到文档文件夹。
要获取文件的路径:
- (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];
但你确实需要更新字典中的数组!
【讨论】:
所以用这个代替我的前两行?我试过了,现在我的错误数组的 NSLog 只返回 null。 是的,但是如果您的 Plist-File 不存在,您需要先将其复制到文档目录。我会用一些额外的代码来更新我的答案。【参考方案2】:您正在将 数组 写入磁盘,而不是数组源自的字典:
[dict writeToFile:finalPath atomically:YES];
此外,您需要在保存之前将 Errors%d.%d
对象替换为更新后的对象:
[dict setObject:errors forKey:/* your formatted key*/];
最后,正如@mavrick3 所指出的,您不能将文件保存到您的包中,只能保存到应用程序的文档目录中。
【讨论】:
OP 仍然需要保存字典,而不是数组。这里犯了几个错误。以上是关于plist中的增量编号的主要内容,如果未能解决你的问题,请参考以下文章