2017-02-07 2 views
0

У меня есть некоторые платежи (доходы и расходы), которые добавляются к Core Data, и каждый день я рассчитываю общее количество, а также показываю, сколько дней подряд сумма платежей была положительной.Как рассчитать количество последовательных дней из данных Core Data?

Как я поступаю прямо сейчас, всегда получаю итог за предыдущий день и увеличиваю счетчик, если он положительный. Этот счетчик сохраняется с использованием UserDefaults.

Моя проблема в том, когда можно сказать, что приложение удалено и переустановлено, счетчик потерян, поэтому я пытаюсь найти способ подсчитывать его динамически каждый раз, но я не думаю, что чтение всех платежей за все дни - это хорошая идея с точки зрения памяти.

Другое решение может быть сохранено с помощью Keychain?

Есть ли еще более элегантный метод? Мне не очень нравится идея сохранения этого счетчика.

+0

как разумно потребительной случай удаления и переустановки приложения? Предполагая, что вы сбросите счетчик, если баланс будет отрицательным, вам просто не нужно загружать баланс в порядке обратной даты и считать, пока вы не понесете отрицательный результат? Должно быть довольно быстро – Russell

+0

@ Russell: но разве мне не нужно читать все платежи из Core Data, чтобы рассчитать это снова? Может быть, я не понял, что у вас спрашивает – Kobe

+0

. Я думаю, это зависит от того, сколько записей у вас есть - если это управляемо, то просто прочитайте все это. Если слишком большой, читайте в партиях по 50 дней или что-то еще? – Russell

ответ

1

В ответе

Предполагая, что вы сброс счетчика, если баланс становится отрицательным, вам просто нужно загрузить баланс в обратном порядке даты, и считать, пока вы идете отрицательными?

В зависимости от того, сколько записей у вас есть, оно может быть неэффективным, чтобы читать все за один раз. Если это так, прочитайте партии с управляемым размером (возможно, 50 дней) и получите больше данных, только если вы по-прежнему записываете положительные остатки.

В какой-то момент, конечно, вы можете просто вернуть «более чем на 100 дней» в качестве действительного ответа :-)