首页 > 解决方案 > 在 CoreData 模型中存储(long long)

问题描述

这里非常初级的问题,我似乎无法解决:

在 Objective-C 中,我可以从 1970 年开始使用(long long)([[NSDate date] timeIntervalSince1970] * 1000.0)(从这里)获得millis。

我想存储在 CoreData 模型中,但我唯一的选择是:

在此处输入图像描述

问题是,我什至不知道我什么转换,因为 timeIntervalSince1970 的签名是:(instancetype)dateWithTimeIntervalSince1970:(NSTimeInterval)secs;

从快速的 Google 中,我发现这(instancetype)是我正在操作的实例(如果我理解正确的话),即NSDate. 如果这表示自 1970 年以来的秒数,则乘以 1000 以获得毫秒是有意义的。为什么我可以将 NSDate 乘以 (int) 呢?文档中的任何内容都没有让我相信这是做事的正确方法。

这就是我有点卡住的地方。我乘以 1000 并最终得到一些我然后转换为 (long long) 的东西,我很喜欢,但随后需要从 CoreData 的可能性列表中选择一个合适的类型,该类型具有存储 (long long) 的精度或等效的东西。

标签: iosobjective-ccore-data

解决方案


Along long与 Integer 64 相同。

您根本无法将 an 乘以NSDate整数。AnNSDate是一个瞬间。可以问它从几个参考日期(其中一个是 unix 纪元)的瞬间是多少秒,但NSDate它本身不是那个东西。这是时间的瞬间。(在内部,它存储为Double自 2001 年 1 月 1 日“参考日期”00:00:00 UTC 以来的秒数,但这是一个实现细节,您不必担心。)

不过,作为一项规则,您应该将日期作为日期存储在 Core Data 中。不要转换为数字或以毫秒为单位思考。这是一个bug坑。如果您有日期,请在 Core Data 中选择“日期”类型来存储它。

-dateWithTimeIntervalSince1970返回一个NSTimeInterval,它是 的类型别名Double。我不确定你在哪里看到(instancetype)返回值。正如您所说,那将是NSDate,这没有任何意义。


推荐阅读