在CoreData模型中存储(long long)

时间:2018-10-17 15:47:54

标签: ios objective-c core-data

在这里我似乎无法解决非常初学者的问题:

在Objective-C中,自1970年以来,我可以使用(long long)([[NSDate date] timeIntervalSince1970] * 1000.0)(来自here)获得毫秒数。

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

enter image description here

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

从一个快速的Google那里,我发现(instancetype)是我正在操作的实例(如果我理解正确的话),即NSDate。如果这表示自1970年以来的秒数,则可以乘以1000以得到毫秒。为什么我可以将NSDate乘以(int)? docs中的任何内容都无法使我相信这是做事的正确方法。

这是我有点卡住的地方。我乘以1000,最后得到 something ,然后将其强制转换为(很长很长),但我很喜欢,但是随后需要从CoreData的可能性列表中选择一种具有精度的合适类型(长长)或等效值的存储。

  • 我应该在CoreData中选择哪种数据类型?
  • 将NSDate乘以整数会返回什么? (可能带有比Apple文档更有用的参考?)

1 个答案:

答案 0 :(得分:1)

long long与整数64相同。

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

不过,通常,您应该将日期作为日期存储在Core Data中。不要转换为数字或以毫秒为单位思考。这是一个臭虫坑。如果您有日期,请在Core Data中选择“日期”类型进行存储。

-dateWithTimeIntervalSince1970 returns an NSTimeInterval,这是Double的类型别名。我不确定您在哪里看到(instancetype)作为返回值。正如您所说,那将是NSDate,这没有道理。