如何在xcdatamodel中更改属性类型?

时间:2015-06-10 14:48:54

标签: ios xcode core-data xcdatamodel

我是一个分配给巨型项目的新手。我发现了一个需要修复的小错误但我不确切知道如何。

好在这里。 Xcode的核心数据模型中的issueNumber属性设置为Integer 64。我需要将其更改为String,因此错误将被修复,但是当我将属性类型从Integer 64更改为String时,我的应用程序会崩溃,并且会以如下所示的巨大输出崩溃:< / p>

  

CoreData:错误:-addPersistentStoreWithType:SQLite   配置:(空)   网址:文件:///用户/苹果/库/开发商/ CoreSimulator /设备/ 67D17D00-2AF8-4BC4-ABB7-091C95D02F35 /数据/集装箱/数据/应用/ B94B1310-4A63-4F91-AE7B-5F625697B3E2 /库/ iMagDocument .sqlite   选项:{           NSInferMappingModelAutomaticallyOption = 1;           NSMigratePersistentStoresAutomaticallyOption = 1;           NSSQLitePragmasOption = {               同步= OFF;           }; } ...返回错误错误Domain = NSCocoaErrorDomain Code = 134130&#34;操作无法完成。 (可可错误       134130)&#34。 UserInfo = 0x7f405ef0 {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,   元数据= {           NSPersistenceFrameworkVersion = 519;           NSStoreModelVersionHashes = {

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

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

2 个答案:

答案 0 :(得分: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]
                          };

答案 1 :(得分:0)

这是正确的方法:

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