我想应用自定义迁移策略来更改给定核心数据实体的属性类型。在我的特定情况下,我有一个名为Location
的实体,其共同属性为latitude
和longitude
。在我的数据模型的第1版中,两个属性都是String
类型。在版本2中,我将类型更改为Double
。
接下来,我创建了一个包含实体映射LocationToLocation
的映射模型。在相应的值表达式中,我添加了FUNCTION($entityPolicy, "stringToDoubleWithString:" , $source.latitude)
。作为自定义策略,我已将MyApp.LocationToLocationMigrationPolicy1to2
添加到映射模型中。
相应的自定义迁移策略文件如下所示:
import Foundation
import CoreData
class LocationToLocationMigrationPolicy1to2: NSEntityMigrationPolicy {
func stringToDouble(value: String?) -> Double {
return Double(value ?? "") ?? 0.0
}
}
但是,在运行我的应用程序时,我收到以下错误消息:
MyApp.sqlite选项:{ NSInferMappingModelAutomaticallyOption = 1; NSMigratePersistentStoresAutomaticallyOption = 1; } ...返回错误错误Domain = NSCocoaErrorDomain Code = 134140“(null)” [...] 错误域= NSCocoaErrorDomain代码= 134190“(null)” UserInfo = {entity = Location,property = altitude,reason = Source and 目标属性类型不兼容}]
我花了几个小时在堆栈溢出和互联网上搜索解决方案。
有人对我有什么建议吗?
非常感谢!