【发布时间】:2017-03-24 12:48:06
【问题描述】:
我有一个例程,可以比较网站上记录的最后更新时间与 iPad 上 CoreData 中保存的相同记录的时间。这里,obsLastUpdated 是 CoreData 中设置为类型Date 的字段。
从CoreData 读取数据到 NSDate:
NSDate *iPadDate = [[self.recordDetails objectAtIndex:0] obsLastUpdated]; //gets the date from CoreData
我收到此警告:
使用表达式初始化“NSDate *”的不兼容指针类型 'NSString *' 类型的
这只是一个警告,但一切仍然有效。如果我尝试将此NSDate iPadDate 与另一个NSDate 进行比较,则没有错误,一切正常。但我想深入了解警告。
如果我从 CoreData 作为字符串读取并转换为 NSDate,我似乎无法正确格式化并且应用程序崩溃。我试过了:
NSString *iPadDateStr = [[self.recordDetails objectAtIndex:0] obsLastUpdated];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
NSDate *iPadDate = [dateFormat dateFromString: iPadDateStr];
我意识到CoreData 不会将日期存储为NSDate,但它究竟是如何存储的以及如何绕过警告?
CoreData 实体:
更新:
错误出现在 obsLastUpdated 被声明为 NSString 的类中。更改为 NSDate,一切都很好。
【问题讨论】:
-
请展示核心数据模型实体的截图。
-
那么你已经创建了核心数据模型来拥有一个字符串。不是日期。你能显示你的核心数据模式的截图吗?并包含目标代码。
-
课程代码?出了点问题。告诉我们什么是错的。不是什么是对的。 :-) 当您在核心数据中将属性设置为日期时,它会返回一个 NSDate。你确定你已经完成了一个干净的构建吗?您最近是否将其从字符串更改为日期?
-
没有。来自实际观察类的代码。定义属性的代码调用 obsLastUpdated
-
当然....谢谢。它被设置为字符串。你已经解决了我的问题,它实际上是否存储为 NSDate。很好的帮助 - 谢谢。
标签: core-data