iphone - 如何在 sqlite 中创建时间戳字段,以便正确初始化具有 NSDate 字段的核心数据对象?

标签 iphone objective-c ios sqlite core-data

看完this great tutorial在预先构建 Core Data 使用的 sqlite 数据库时,我仍然停留在日期时间列上。我已经交叉发布了我的问题以尝试获得一些帮助,因为我被困在这个问题上。

我的应用程序以只读方式使用预构建的数据库,它是一个交通应用程序,数据源是计划数据。日期采用以下格式(来自数据提供者):“20110223”(写作“2011 年 2 月 23 日”)。我一直在查看有关 2001 年 iPhone 引用日期的帖子和评论,并根据插入 sqlite 之前的秒数调整日期/时间值。我的导入器脚本定义了一个 TIMESTAMP 列来存储这个秒的增量。存储后的列示例为“319766400”。

这是一个 Ruby 片段,作为我的脚本的示例:

>> delta_seconds = Time.parse("20110223") - Time.local(2001, 1, 1, 0, 0, 0)
=> 320112000.0
>> Time.at(delta_seconds)
=> Fri Feb 22 19:00:00 -0500 1980

请注意,从 delta_seconds (Time.at(delta_seconds)) 请求时间显示了一年中的正确日期(2 月 22 日),但在 1980 年,即 EPOCH 之后的 10 年——这似乎是正确的。在 Core Data 中,我将映射到该数据库字段的模型属性定义为“NSDate”。但是,当我启动模拟器并检查调试器时,对于每个对象,我要求 NSDate 字段(start_date)如下: [object valueForKey:@"start_date"] 这给了我“2001-08-21 18:10 :19 格林威治标准时间”。换句话说,它似乎没有读取增量秒值。如果是这样,我希望它在这种情况下应用“10 年的秒数”并提出“2011”年的日期。

你能发现我做错了什么吗?关于潜在修复的任何建议?谢谢! (iOS 4.1 核心数据)

:有人可以从他们的 sqlite 数据库中发布 Core Data 读取的值,从旨在成为 NSDate 字段来源的列中发布一个值吗?我的数据库中的一个示例值为 320371200这似乎不起作用。

最佳答案

核心数据模式没有记录,因此可以在没有警告的情况下更改。不能保证一年前文章中的架构仍然是今天使用的架构。

虽然,将现有 SQL 数据库的模式转换为 Core Data 使用的模式似乎是最简单的解决方案,但它实际上是一个相当困难且脆弱的解决方案。

更好的想法是使用数据模型和主应用程序中的任何类编写一个小型实用程序应用程序。然后导入现有 SQL 并从该数据创建 Core Data 对象和图形。然后从实用程序应用程序中获取数据库并坚持发布应用程序。

它不再需要时间,而且您的架构是最新的,可以毫无顾虑地升级。

关于iphone - 如何在 sqlite 中创建时间戳字段,以便正确初始化具有 NSDate 字段的核心数据对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5128929/

相关文章:

iphone - 内存错误访问 : Questions with releases, 协议(protocol)和委托(delegate)

iphone - 防止在 UITableViewCell 内重新加载 MKMapView

iphone - 在 Xcode/Iphone 中测量 FPS/性能

iOS 电子邮件地址验证不接受 .in

objective-c - Xcode 中的奇怪错误

iphone - 如何获取 UIFont 实例的字体大小或粗体版本

ios - 即使在我获得 AVAssetExportSessionStatusCompleted 状态后也没有获得组合视频, objective-c

c++ - 从 Objective-C 调用 C++

ios - UITextView 不是从 iOS 中的第一行开始

c# - xamarin 意图扩展与 netstandard 导致 MT2001 错误