Xcode 9为模拟器与设备中的实体的Date类型属性生成不同的代码.我在coredata中将类设置为类别/扩展名下的codegen功能.
直到Xcode 8.3(最新)它一切正常(NSDate总是).下面是Xcode 9(Swift 4)为属性自动生成的代码 –
在设备上: –
@NSManaged public var @R_301_103@Date: Date?
和,
在模拟器上: –
@NSManaged public var @R_301_103@Date: NSDate?
有谁遇到过这个问题?对于一个有50个成员的项目来解决这个问题的最佳解决方案是什么,直到Xcode更新修复它(我希望有一个苹果雷达)?
解决方法
我自己回答一下.这些是我的观察(到目前为止)和潜在的解决方案.
这个问题似乎是随机的.突然间,问题已经消失,codegen最终在模拟器和设备上确定了Date.
// Workaround for Xcode 9 bug. The autogenerated code for 'Date' type attribute is NSDate vs Date based on device vs simualtor. // This macro condition should be removed once an Xcode update fixes this issue #if (arch(i386) || arch(x86_64)) // Simulator @R_301_103@Date <- (map["@R_301_103@Date"],NSDateTransform()) // milliseconds to NSDate #else // Device @R_301_103@Date <- (map["@R_301_103@Date"],DateTransform()) // milliseconds to Date #endif
PS:我记得我测试过它至少在iPhone SE Simulator,iPhone 7设备上运行