对于NSManagedObject,Xcode 9构建了Date vs NSDate的问题

Ash*_*hok 7 xcode date core-data nsmanagedobject codegen

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

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

在设备上: -

@NSManaged public var requiredDate: Date?
Run Code Online (Sandbox Code Playgroud)

和,

在模拟器上: -

@NSManaged public var requiredDate: NSDate?
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

Ash*_*hok 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
Run Code Online (Sandbox Code Playgroud)

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