如何获取新的 .plist 数据



我正在使用此代码从本地(在XCode项目中).plist文件中读取数据。

NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"GameData.plist"];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if (![fileManager fileExistsAtPath: path])
    {
        NSString *bundle = [[NSBundle mainBundle] pathForResource:@"GameData" ofType:@"plist"];
        [fileManager copyItemAtPath:bundle toPath: path error:&error];
    }
    gameData = [[NSMutableDictionary alloc] initWithContentsOfFile: path];

一开始效果很好,但现在当我在模拟器中单步执行代码时,我发现我的游戏使用的是一开始就存在的 .plist 文件版本,并且我在新的 GameData.plist 文件中设置的新字段没有出现。

我认为这是因为如果文件已经存在,它不会再次获取数据? 但是我如何获得新版本的 .plist 文件?我尝试删除 if 语句,但出现运行时错误,指出该文件已存在。

听起来你需要设置一个版本系统。但是,将文件从捆绑包复制到文档文件夹的唯一原因是您可以对其进行编辑,因此您需要考虑如何合并捆绑包中的更新文件以及文档文件夹中的用户添加内容。

一旦您制定了合并文件的计划,您就可以更改 if 语句,这样它不仅会检查文件是否已存在(如果存在,则需要先删除它,然后才能替换它),还可以考虑版本。您可能希望将当前复制的版本号存储在用户默认值中,并将版本号添加到捆绑包中的文件。您可能还希望将用户修改的数据保存在不同的文件中,并将其用作替代。

最新更新