【发布时间】:2018-03-04 09:04:54
【问题描述】:
Xcode 9 为模拟器与设备中实体的Date 类型属性生成不同的代码。我在 coredata 中将 Class 下的 codegen 功能设置为 category/extension。
直到 Xcode 8.3(最新)它都运行良好(NSDate 总是)。下面是 Xcode 9 (Swift 4) 的 自动生成代码 属性 -
在设备上:-
@NSManaged public var requiredDate: Date?
与,
在模拟器上:-
@NSManaged public var requiredDate: NSDate?
有人遇到过这个问题吗?对于一个有 50 多个成员的项目,在 Xcode 更新修复它之前修复这个问题的最佳解决方案是什么(我希望有一个苹果雷达)?
【问题讨论】:
-
实际上即使在 Swift 3 中,推荐的类(结构)也是
Date -
我假设您只是在评论您的观察,而不是建议或询问任何内容。请注意,我上面粘贴的代码是由 Xcode 自动生成,因为 codegen 设置不是“手动/无”。更新了我的问题语言,使其更加清晰。
-
我在暗示编译器并不完美,不要盲目相信它。例如,即使您将 Core Data 属性声明为非可选,编译器也会生成可选属性,并且编译器会为任何数字类型生成
NSNumber,尽管 SwiftInt、Double、Bool也完全有效. -
是的,没错。我不知道解决此问题的最佳方法是什么。不想使用“手动/无”设置。而且,如果我在设备和模拟器上使用 #if 宏并以不同方式处理此属性,那么我担心 Xcode 何时会在更新中修复此问题,然后整个团队 + 自动化服务器几乎需要同时更新 Xcode。将其视为主要的 Xcode 更新。不是一个好的解决方案。
-
本期存在一些随机性。突然,问题自动消失了,
codegen在模拟器和设备上都选择了日期。
标签: xcode date core-data nsmanagedobject codegen