7

DateXcode 9 为模拟器和设备中实体的类型属性生成不同的代码。我在 coredata 中设置了codegen功能。Classcategory/extension

直到 Xcode 8.3(最新)它都工作正常(NSDate总是)。下面是Xcode 9 (Swift 4) 为属性自动生成的代码-

在设备上:-

@NSManaged public var requiredDate: Date?

和,

在模拟器上:-

@NSManaged public var requiredDate: NSDate?

在此处输入图像描述

有人遇到过这个问题吗?对于一个有 50 多个成员的项目来说,在 Xcode 更新修复它之前修复这个问题的最佳解决方案是什么(我希望有一个苹果雷达)?

4

1 回答 1

6

让我自己回答这个问题。这些是我的观察(到目前为止)和潜在的解决方案。

这个问题似乎是随机的。突然,这个问题消失了,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
    requiredDate <- (map["requiredDate"], NSDateTransform())    // milliseconds to NSDate
#else   // Device
    requiredDate <- (map["requiredDate"], DateTransform())    // milliseconds to Date
#endif

PS:我记得我至少在 iPhone SE Simulator、iPhone 7 设备上测试过它

于 2017-09-24T02:12:25.003 回答