【发布时间】:2016-02-16 07:43:53
【问题描述】:
我需要计算最后连续几天,但不知道该怎么做。 例如我得到这样的核心数据:
|id| isPresent(Bool)| date(NSDate)|
|==|================|=============|
| 1| 0| 2016-02-11 |
| 2| 1| 2016-02-11 |
| 3| 1| 2016-02-12 |
| 4| 0| 2016-02-14 |
| 5| 1| 2016-02-15 |
| 6| 1| 2016-02-16 |
| 7| 1| 2016-02-16 |
我尝试检查直到今天的最后一个未出现的日期(isPresent = 0)并得到 2016-02-14 - 这样我就可以计算天数,这很容易。
但是,如果我将 2016-02-14 标记为 isPresented = 1(如下表所示),我将得到最后未显示的 2016-02-11 - 但这是不正确的,没有 2016-02-13 的数据,所以这个日期的 isPresented 应该是 0 并且连胜应该从这个日期开始计算
|id| isPresent(Bool)| date(NSDate)|
|==|================|=============|
| 1| 0| 2016-02-11 |
| 2| 1| 2016-02-11 |
| 3| 1| 2016-02-12 |
| 4| 1| 2016-02-14 |
| 5| 1| 2016-02-15 |
| 6| 1| 2016-02-16 |
| 7| 1| 2016-02-16 |
我搜索了不同的算法来查找缺失日期的条纹或 sql reuests (sql server displaying missing dates),但无法弄清楚如何在核心数据中使用它。
我正在考虑另一种数据,每次用户打开应用程序时都会保持连续和更新,但如果用户没有打开应用程序会遇到同样的问题。
输出: 我需要找到连续的天数或中断的日期,所以对于
对于第一个表:streak = 2 或 breakDate = 2016-02-14 - 我尝试这个,但我的解决方案错误,因为第二个表
对于第二张表:streak = 3 或 breakDate = 2016-02-13 - 无法弄清楚如何获取缺失日期
重要更新: 会有云同步数据,所以我在app里面看不到任何解决方案,真的需要在coredata中找到丢失的日期或isPresented = 0
p.s.如果你能通过 swift 帮助我,我正在使用 swift,它会很棒,但我也了解 Obj-C。对不起我的英语不好
【问题讨论】:
-
您可以使用一些选择器获取数据。这可能对您的问题有所帮助。
-
请告诉我们您的预期输出
-
您的主要问题是将缺少的日期(天?)用 isPresent 填充为 0。但这也提出了这个问题:您的意思是每天吗?或者可能只从周一到周五,等等?也许在应用程序启动时,它会检查当前日期,并从上次开始时填写缺失的日期?然后,您可以使用 fetchLimit 和 isPresent == 0 的条件和降序来查找您的日期。
-
@Lumialxk true 我使用谓词,为我的错误解决方案排序,fut 无法理解如何使用复杂的 sql 请求(如有问题的链接)来处理核心数据
-
@Larme 主要问题是获取 coredata ot date 中缺少的日期,其中 isPresent 为 0 我考虑设置缺少的日期,但认为方向错误,用户可能会忘记应用程序 100+ 或更多天并为所有天设置 0 不是一个好主意。顺便说一句,如果用户只是安装应用程序,我不知道该怎么办,检查共享变量是否为空,将其设置为今天,如果不为空,则将所有日期设置为今天 isPresent=0,但如果用户通过通知检查 isPresent?在通知操作中做同样的事情吗?
标签: ios sql objective-c swift core-data