【问题标题】:Getting rid of old unused .mom(d) files from an installed app on IOS?从 IOS 上已安装的应用程序中删除旧的未使用的 .mom(d) 文件?
【发布时间】:2013-03-27 08:39:55
【问题描述】:

我正在处理应用程序更新。 我从头开始重写了应用程序并切换到magicrecords进行模型控制 这是我的问题:

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

无法将模型与名为“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”或其他名称,但我真的很着迷于为我使用的东西使用专有名称,所以我很高兴知道是否有方法来做到这一点。

感谢您阅读并(可能)回复:)

【问题讨论】:

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


    【解决方案1】:

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

    我的新 .xcdatamodelD 有一个不同的名称。我认为这对我来说很重要,因为我可以指定 Magic Record 使用特定的 momd,而不是搜索捆绑包并抱怨:

    无法将模型与名为“foo”的两个不同实体合并

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

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

    如果你愿意,你可以核对你的旧 sql 数据存储,如果这就是你想做的,那么堆栈上有很多关于重置 coredata 的答案。

    【讨论】:

    • 这正是我所做的:)
    【解决方案2】:

    你所描述的没有意义:

    A.你不能从你的包中删除任何东西。它是只读的。

    B.当人们更新你的新版本时,你的包中不应该有 olddatabase.mom。它很可能位于应用程序的用户文档文件夹中。

    如果我没看错您的问题,您需要的是核心数据迁移。 Try this.

    编辑:仅供参考

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

    【讨论】:

    • 感谢您的回答,真正的问题是,我创建了一个新项目,更改了相关字段以使其与旧应用程序相同。新应用没有相应的 xcdatamodel 文件,但这些文件存在于具有旧版本应用的用户设备上。
    • 因此,如果我理解正确,我要做的就是将旧的 .xcdatamodel 文件添加到新项目中,添加新版本并将该 xcdatamodel 文件中的旧“foo”实体更改为新版本而不是将其添加到新的 xcdatamodel 文件中?
    • 谢谢,通过重构新实体名称解决(由于时间限制)。我发现 xcode 有一个很好的重构工具来处理这些情况。
    • 我很想有一个很好的解决方案,因为我目前在同一条船上
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 2012-09-23
    • 2011-10-12
    • 1970-01-01
    • 2012-07-06
    相关资源
    最近更新 更多