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

前端之家收集整理的这篇文章主要介绍了对于NSManagedObject,Xcode 9构建了Date vs NSDate的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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设备上运行

原文链接:https://www.f2er.com/iOS/331562.html

猜你在找的iOS相关文章