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中的增量编号的主要内容,如果未能解决你的问题,请参考以下文章

iCloud 增量数据

如何将增量发票编号放入 DatabaseReference

如何在猫鼬中插入自动增量编号

使用 VBA 的增量发票编号 - 访问

工厂的增量编号,Laravel

带增量编号的加特林进料器(非随机)