从IOS上安装的应用程序中删除旧的未使用的.mom(d)文件?

时间:2013-03-27 08:39:56

标签: ios objective-c core-data migration magicalrecord

我正在进行应用程序更新。 我从头开始重写了应用程序并切换到magicalrecords进行模型控制 继承人我的问题:

  1. 我创建了一个新的“newdatabase.xcdatamodel”文件,其中包含一个名为“foo”的实体。
  2. 在应用程序的第一个版本中,我还有一个“olddatabase.xcdatamodel”,它还包含一个名为“foo”的实体
  3. 当用户从头开始安装应用程序时没有问题。
  4. 如果用户拥有该应用程序的先前版本,则其设备具有“olddatabase.mom”文件,该文件还包含旧的“foo”实体,因此您可以想象,应用程序因错误而崩溃:
  5.   

    无法将模型与名为'foo''

    的两个不同实体合并

    在加载新的mom文件之前,是否可以检测并删除旧的“olddatabase.mom”文件?

    我尝试过以下代码,就像我想的那样,我对该文件夹没有任何许可:)

        NSString *path = [[NSBundle mainBundle]pathForResource:@"olddatabase" ofType:@"mom"];
    if(path){
        NSError* error = nil;
        NSFileManager *fileManager = [NSFileManager defaultManager];
        [fileManager removeItemAtPath:path error:&error];
        if(error)
            NSLog(@"Error: %@",[error description]);
    }
    NSLog(@"path = %@",path);
    

    我开始考虑将我的新“foo”实体名称更改为“foo2”或其他内容,但我真的很痴迷于使用适当的名称来使用我所以我很乐意学习是否有这样做的方式。

    感谢阅读和(可能)回复:)

2 个答案:

答案 0 :(得分:2)

好的我有完全相同的问题,这就是我解决它的方法......

我的新.xcdatamodelD有一个不同的名字。我认为这对我来说很重要,因为我可以指定魔术记录来使用特定的妈妈而不是搜索捆绑并抱怨:

  

无法将模型与名为'foo''

的两个不同实体合并

所以这很简单。我只是告诉Magic Record专门使用一个新的momd,然后使用以下设置调用创建核心数据栈......

[MagicalRecord setDefaultModelNamed:@"new_name.momd"];
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"new_foosql.sqlite"];

如果你想要你可以核你的旧sql数据存储区,如果那就是你想要做的事情,堆栈上有许多关于重置coredata的答案。

答案 1 :(得分:1)

你描述的内容没有意义:

一个。您无法从捆绑包中删除任何内容。它是只读的。

B中。当人们更新您的新版本时,您的捆绑包中应该没有olddatabase.mom。最有可能的是它位于应用程序的用户文档文件夹中。

如果我正确地阅读了您的问题,您需要的是核心数据迁移。 Try this.

编辑:仅供参考

重新阅读OP的文字后,上面的B部分不正确。但由于OP已接受此答案,因此不允许删除答案。