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

Xcode 9为模拟器与设备中的实体的Date类型属性生成不同的代码.我在coredata中将类设置为类别/扩展名下的codegen功能.

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

在设备上: –

@NSManaged public var requiredDate: Date?

和,

在模拟器上: –

@NSManaged public var requiredDate: 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
    requiredDate <- (map["requiredDate"],NSDateTransform())    // milliseconds to NSDate
#else   // Device
    requiredDate <- (map["requiredDate"],DateTransform())    // milliseconds to Date
#endif

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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...