gpt4 book ai didi

ios - 当传递到自定义迁移策略中的模型迁移函数时,核心数据实体中的 Int16 支持的枚举属性似乎具有不正确的值

转载 作者:行者123 更新时间:2023-11-30 11:11:04 24 4
gpt4 key购买 nike

我正在执行核心数据模型迁移;在我的映射模型自定义策略函数中,传递的属性值之一不正确。这是为什么?

背景:

我的核心数据实体 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
}

在此应用程序中,这始终按预期运行。

情况:

我正在两个模型版本之间执行迁移。这两个版本都没有触及readStateBook 实体的实体映射具有由以下值表达式指定的属性映射(对于某些其他属性):

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) >),该函数为 readState 传递值 17!

Debug screenshot showing readState equal to 17

这是为什么呢?枚举在核心数据中的存储方式是否有一些奇怪的地方?如果需要,我很乐意提供更多详细信息。

最佳答案

实体映射函数签名必须使用NSNumber,而不是Int16。例如:

@objc func currentPage(forCurrentPage currentPage: NSNumber?, readState: NSNumber) -> NSNumber?

然后 readState 被正确传递为 1。我不明白为什么。

关于ios - 当传递到自定义迁移策略中的模型迁移函数时,核心数据实体中的 Int16 支持的枚举属性似乎具有不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52172414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com