【问题标题】:How to change attribute type in xcdatamodel?如何更改 xcdatamodel 中的属性类型?
【发布时间】:2015-06-10 14:48:54
【问题描述】:

我是一个被分配到巨大项目的新手。我发现了一个需要修复的小错误,但我不知道如何修复。

好的,就是这样。 Xcode 核心数据模型中的issueNumber 属性设置为Integer 64。我需要将其更改为String,因此该错误将得到修复,但是当我将属性类型从Integer 64 更改为String 时,我的应用程序崩溃并出现如下所示的巨大输出:

CoreData:错误:-addPersistentStoreWithType:SQLite 配置:(空) URL:file:///Users/Apple/Library/Developer/CoreSimulator/Devices/67D17D00-2AF8-4BC4-ABB7-091C95D02F35/data/Containers/Data/Application/B94B1310-4A63-4F91-AE7B-5F625697B3E2/Library/iMagDocument .sqlite 选项:{ NSInferMappingModelAutomaticallyOption = 1; NSMigratePersistentStoresAutomaticallyOption = 1; NSSQLitePragmasOption = { 同步 = 关闭; }; } ...返回错误Error Domain=NSCocoaErrorDomain Code=134130“操作无法完成。(Cocoa错误 134130.)" UserInfo=0x7f405ef0 {URL=file:///Users/Apple/Library/Developer/CoreSimulator/Devices/67D17D00-2AF8-4BC4-ABB7-091C95D02F35/data/Containers/Data/Application/B94B1310-4A63-4F91 -AE7B-5F625697B3E2/图书馆/iMagDocument.sqlite, 元数据={ NSPersistenceFrameworkVersion = 519; NSStoreModelVersionHashes = {

然后它继续...这是我所做的:我将数据模型中的类型从 Integer 64 更改为 String:

好吧,我做错了什么?肯定有一些我明显遗漏的东西,所以每次我更改属性类型时应用程序都会崩溃。

【问题讨论】:

    标签: ios xcode core-data xcdatamodel


    【解决方案1】:

    这是一个非常复杂的问题。您不能简单地更改属性的数据类型。您看到的错误意味着核心数据无法将您的数据迁移到新版本。

    1) 创建新的模型版本并在那里设置新的数据类型。见https://developer.apple.com/library/ios/recipes/xcode_help-core_data_modeling_tool/Articles/creating_new_version.html

    2) 设置要使用的新模型版本。 https://developer.apple.com/library/ios/recipes/xcode_help-core_data_modeling_tool/Articles/setting_current_version.html

    3) 您必须使用选项 NSMigratePersistentStoresAutomaticallyOption 和 NSInferMappingModelAutomaticallyOption 添加您的持久存储。

    NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption: [NSNumber numberWithBool:YES],
                              NSInferMappingModelAutomaticallyOption: [NSNumber numberWithBool:YES]
                              };
    

    【讨论】:

    • 感谢您的回答...我认为这很复杂,但我会尝试您的回答...非常感谢:)
    【解决方案2】:

    这是正确的方法:

    - (NSDictionary *)persistentStoreOptions {
        return @{NSInferMappingModelAutomaticallyOption: @YES,
                 NSMigratePersistentStoresAutomaticallyOption: @YES,
                 NSSQLitePragmasOption: @{@"synchronous": @"OFF"}};
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-02
      • 2013-05-17
      • 2019-10-25
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多