我正在执行核心数据模型迁移;在我的映射模型自定义策略函数中,传递的传递的属性值之一不正确。为什么会这样?
背景:
我的核心数据实体Book
具有属性readState
,属性类型为Integer16
。与此实体对应的类将该属性表示为具有枚举类型(为清晰起见,删除了其他属性):
@objc(Book)
class Book: NSManagedObject {
@NSManaged var readState: BookReadState
}
@objc enum BookReadState: Int16 {
case reading = 1
case toRead = 2
case finished = 3
}
在此应用程序中,此行为始终符合预期。
情况:
我正在两个模型版本之间进行迁移。这两个版本不碰readState
。 Book
实体的实体映射具有由以下值表达式指定的属性映射(用于某些其他属性):
FUNCTION($entityPolicy, "currentPageForCurrentPage:readState:", $source.currentPage, $source.readState)
我的实体映射具有一个自定义策略类,如下所示:
class BookMapping_12_13: NSEntityMigrationPolicy {
@objc func currentPage(forCurrentPage currentPage: NSNumber?, readState: Int16) -> NSNumber? {
// function implementation here
}
}
问题:
当在Book
属性等于readState
(例如.reading
)的1
实体上执行此迁移时,该函数将传递值17
为readState
!
这是为什么?枚举在Core Data中存储的方式是否有些奇怪?如果需要,我很乐意提供更多详细信息。
答案 0 :(得分:0)
实体映射功能签名必须使用NSNumber
,而不是Int16
。例如:
@objc func currentPage(forCurrentPage currentPage: NSNumber?, readState: NSNumber) -> NSNumber?
然后readState
正确地作为1
传递。我不明白为什么。