【问题标题】:Adding attribute in database which is added in datamodel in iPhone在 iPhone 的数据模型中添加的数据库中添加属性
【发布时间】:2012-03-28 08:22:53
【问题描述】:

我创建了一个包含 10 个实体的数据模型。几天后,我在其中一个实体中添加了一个属性。这时我运行应用程序时,应用程序崩溃了。所以,请帮我解决这个问题。 提前致谢。

【问题讨论】:

  • 发布您的代码。此时您的应用程序正在崩溃。你试过用断点解决吗???

标签: iphone ios xcode core-data


【解决方案1】:

更改模型后,您必须删除设备/模拟器上的应用并重新安装。那是因为您现有的 SQLite-DB 不再适合现在更改的模型。

【讨论】:

  • 错误。您必须创建一个新的模型版本并在其中创建任何额外的实体/属性。
  • 当然,这将是一个更好的解决方案,尤其是对于已经推出的应用程序。我认为这里不是这种情况。
  • IMO 是从一开始就做正确的事,而不是在需要的时候。
【解决方案2】:

如果您仍然只是开发应用程序,最简单的答案就是删除并重新安装它。

如果您真的想保留数据库的内容,Core Data 可以自动从您的架构的一个版本迁移到另一个版本(有一些警告)。 See the documentation了解详情。

【讨论】:

    【解决方案3】:

    如果您不希望您的应用崩溃 - 每次您需要将属性添加到实体或将实体添加到模型时 - 您必须创建新的模型版本并显示托管对象模型以使用该新版本。

    您可以通过以下方式创建新的模型版本:Editor -> Add Model version...。然后在您的应用委托的persistentStoreCoordinator 方法中启用自动迁移

    NSError *error = nil;
    NSURL *storeURL = <#The URL of a persistent store#>;
    NSPersistentStoreCoordinator *psc = <#The coordinator#>;
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
        [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
        [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
    
    BOOL success = [psc addPersistentStoreWithType:<#Store type#>
                        configuration:<#Configuration or nil#> URL:storeURL
                        options:options error:&error];
    if (!success) {
        // Handle the error.
    }
    

    【讨论】:

    • 在您开发应用程序时,这似乎有点矫枉过正。
    • IMO 是从一开始就做正确的事,而不是在需要的时候。
    【解决方案4】:

    您必须让应用程序清除所有目标,然后从模拟器中构建和删除应用程序,然后再构建应用程序

    【讨论】:

    • 错误。您必须创建一个新模型版本并在其中创建任何额外的实体/属性。
    猜你喜欢
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 2017-11-16
    • 2014-07-11
    相关资源
    最近更新 更多