ios - 在 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) 的精度或等效的东西。
- 我应该在 CoreData 中选择什么数据类型?
- 将 NSDate 乘以整数会返回什么?(可能参考比 Apple 的文档更有用?)
解决方案
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
,这没有任何意义。
推荐阅读
- ubuntu - ubuntu 中的 libc 还是 glibc?
- c++ - 通过 C++ API for Tensorflow 中的模型流式传输数据时如何保留 LSTM 隐藏状态?
- html - 如何修复“打开浏览器失败!请”在 vscode
- excel - 如果选择“退出”按钮,则删除单元格值
- selenium - 无法切换具有不同动作点的弹出窗口
- sql - 如何获取具有特定字符串的列
- css - 从宽度计算图像高度
- java - ListView 控件中的 setConverter 等价物在哪里,例如 ComBox 控件?
- android - Android RecyclerView 插入后不刷新
- ios - 向 MP4 文件添加章节,并在 iOS 12 播客应用程序上被识别