Я хочу создать приложение, которое будет регистрировать, когда я бегу трусцой, и использует базовые данные для хранения информации.Я хочу сохранить каждую тренировку с датой, расстоянием и временем, которое я пробежал.Я также хочу иметь возможность отображать сводку, которая содержит общее количество пройденных мною пробежек и общую дистанцию пробега.
В моем дизайне я мог отображать сводку непосредственно из объектов тренировки.Сколько раз я пробежал, это просто количество объектов тренировки, и я мог бы суммировать расстояние в каждой тренировке, чтобы получить общее расстояние пробега.Тем не менее, я думаю, что вторая операция является слишком дорогой, потому что мне приходится сканировать всю базу данных каждый раз, когда я хочу отобразить эти данные (это та же проблема, что и в iTunes, когда вы хотите отобразить общее количество часов музыки, которое у вас есть в вашемустройство).Я мог хранить эту информацию в свойстве каждый раз, когда приложение запускается, но я думаю, что это вызвало бы медленный запуск.Из-за этого я подумал, что у меня есть 2 объекта coredata. Сводка и тренировка:
+---------------------+ +---------------------+
|Summary | |Workout |
+---------------------+ +---------------------+
|totalDistance | <--------------->> |date |
|totalAmountOfWorkouts| |distance |
+---------------------+ |time |
+---------------------+
Теперь возникает вопрос.Как обновить сводку?
Я мог бы вручную обновить totalDistance и totalAmountOfWorkouts.Я представляю реализацию какого-то метода updateWorkout, который запускается каждый раз, когда я создаю новую тренировку.Тем не менее, я знаю, что Coredata уже имеет возможности наблюдения и может сообщить мне, когда был вставлен новый объект тренировки, и я мог бы обновить Summary: KVO.Я никогда не использовал KVO, и мне интересно, подходит ли это для использования KVO?Но как ты это делаешь?Является ли KVO лучшим подходом для решения этой проблемы, или мне лучше реализовать протокол в Workout и назначить Summary делегатом?Я смутно помню, что слышал, что шаблон KVO трудно отлаживать.
Подводя итог, я задаю следующие вопросы:
Q1: Должен ли я получить totalDistance, непосредственно сканирующую БД?
Q2: Должен ли я использовать KVO или шаблон делегата?
Q3: КакTotalDistance обновлен?