1

如果序列之间存在时间间隔,我遇到了如何在单个图表上显示核心数据实体序列的问题。

我得到了一个固定长度的条形图(由 UITableView 支持),每个条形由一个核心数据实体表示,所有实体都带有时间戳并相互跟随,因此对此类数据进行排序会产生如下图。这种图表的好处是NSFetchedResultsController可以用来动态更新表格视图以响应添加的新事件。结果是在用户看来,随着时间的推移,新的条形图会添加到左侧。 睡眠周期图

我的问题是我想扩展这个图表,让它 24 小时长并且可以左右滚动。在这种情况下,将出现应用程序中不存在任何数据的情节。最终结果是,如果我在数据存在间隙时依赖 NSFetchedResultsController,并且我想为丢失的数据显示空白单元格。

我对你将如何解决这个问题感兴趣。

我看到了两个潜在的解决方案:

1) 放弃使用 的方法NSFetchedResultsController,而是手动计算 a 中的条数UITableView。每个条形图由开始日期和结束日期定义。然后我可以使用NSFetchRequestwith predicate 来查询每个 bar 的数据。如果有一个事件的时间戳在条形的日期范围内,则显示一个条形,否则显示一个空白。

方法 #1 的问题在于它很慢,虽然它确实允许滚动整个数据集,但它很慢而且滞后,因为每个获取请求都是针对每个新柱执行的。此外,我需要手动刷新表以响应添加的新数据,这很难正确实现。

2)也许我可以用空白事件预先填充数据集,然后在数据可用时“填充”它们。这将允许我使用获取的结果控制器保留表格视图,从而实现更平滑的滚动,但代价是显着增加了应用程序使用的持久存储(因为将在应用程序使用之间创建空白实体)。

如果有我没有想到的其他方法,我会徘徊。您将如何创建一个可在应用程序的持久数据存储中允许“间隙”的侧滚动条形图?

谢谢您的意见!

4

1 回答 1

1

您的问题确实与 Core Data 或 NSFetchedResultsController 没有(或不应该)任何关系。您的图表视图如何绘制它给出的数据完全取决于图表视图。没有理由不能编写使用 NSFetchedResultsController适当处理数据间隙的图形视图,但 UITableView 从未打算处理丢失/空单元格。

问题不在于您使用的是 Core Data 或 NSFetchedResultsController。问题是你在滥用 UITableView。

绘制条形图非常简单——它只是在适当位置绘制的一系列矩形。您可以为您的视图提供一个获取的结果控制器,并让它查看fetchedObjects属性以获取当前的对象列表。然后,它可以根据需要渲染尽可能多的对象,并且可以使用每个对象的开始和结束日期来定位图形上的绘图。将您的图表放在 UIScrollView 中,这样您就不必担心滚动。如果图形可以变大,添加平铺以便您只绘制用户正在查看的部分,就像 UITableView 一样。

看起来您目前也在表格视图上方绘制一些内容。如果您创建自己的图表视图,您可能会考虑同时绘制额外的内容(红线、红色和绿色气泡、高 REM 概率的东西)。这样做可以很容易地确保所有内容都正确地位于图表上(这对于您当前的方案可能有点麻烦)。

于 2012-10-08T02:45:01.113 回答