Xcode 9构建NSManagedObject

时间:2017-09-22 17:52:52

标签: xcode date core-data nsmanagedobject codegen

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

直到Xcode 8.3(最新版本)一切正常(NSDate总是如此)。以下是Xcode 9(Swift 4)的属性自动生成代码 -

在设备上: -

@NSManaged public var requiredDate: Date?

在模拟器上: -

@NSManaged public var requiredDate: NSDate?

enter image description here

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

1 个答案:

答案 0 :(得分:6)

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

此问题似乎 RANDOM 。突然,问题已经消失,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模拟器,iPhone 7设备上运行