Я пишу приложение, которое записывает некоторые данные в течение длительного периода времени (до нескольких часов) и отображает данные на графике/графике. Я сохраняю свои записанные значения с использованием основных данных и используя основной график, чтобы отображать их в диаграмме рассеяния. Мой основной объект данных выглядит следующим образом:Динамически извлекать данные для диапазона графиков в основной диаграмме iOS
MyEntity
- TIMESTAMP: Дата
- SomeValue: Integer 64
Мой график основной сюжет рассе сюжет, который отображает значения "SomeValue" на оси y и значениями «TimeStamp» на оси x.
На скриншоте показан основной сюжет.
Проблема в том, у меня есть много значений (значения добавляются в базу данных данных ядра каждую секунду в течение нескольких часов). Я не хочу получать все мои объекты Core Data и загружать их в память, чтобы они отображались в основном графике сразу. Вместо этого я предпочел бы только получать объекты, которые лежат в пределах видимого диапазона графиков, из моего основного хранилища данных, а затем отображать их с использованием основного графика. Я бы сохранил полученные результаты в NSArray или что-то подобное и использовал NSArray в моих методах CPTPlotDataSource для заполнения графика. Мой NSArray всегда будет перезаписываться, когда диапазон изменяется, так что в памяти сохраняются только видимые точки данных.
Что я думал, что я хотел бы использовать метод CPTPlotSpaceDelegate
- (CPTPlotRange *)plotSpace:(CPTPlotSpace *)space
willChangePlotRangeTo:(CPTPlotRange *)newRange
forCoordinate:(CPTCoordinate)coordinate
, и получать соответствующие объекты из основных данных, используя TIMESTAMP в качестве предиката. Однако я не мог понять, как это сделать. Есть ли способ получить доступ к значениям timeStamp, учитывая текущий диапазон графика? Я думал о попытке получить доступ к моим методам оси x, поскольку они отображают текущее время и извлекают из моего хранилища данных, используя это, но я не мог понять, как это сделать. Это даже правильный способ сделать это? Любая помощь приветствуется.
Вы должны знать, что означает 'CPTPlotRange' с точки зрения вашего времениStamp, и вы можете использовать' NSPredicate' в вашей выборке CoreData. – Larme