0

w Я использую три контроллера выборки для фильтрации трех списков задач; сегодняшние, завтрашние и, наконец, более поздние задачи. В этом случае у меня есть три предиката:iOS - обновление NSFetchedResultsController

NSPredicate *todayPredicate = [NSPredicate predicateWithFormat:@"(date <= %@) AND isDone == 0", 
            [self getEndDateForDay:P_Section_Today]]; 
NSPredicate *tomorrowPredicate = [NSPredicate predicateWithFormat:@"((date >= %@) AND (date <= %@)) AND isDone == 0", 
            [self getStartDateForDay:P_Section_Tomorrow], 
            [self getEndDateForDay:P_Section_Tomorrow]]; 
NSPredicate *laterPredicate = [NSPredicate predicateWithFormat:@"date >= %@ AND isDone == 0", 
             [self getStartDateForDay:P_Section_Later]]; 

Я был доволен этим. Оно работало завораживающе. Пока, в течение ночи, я столкнулся со следующей проблемой. Три контроллера не обновляют себя.

Пример: - Запуск приложения в воскресенье. (Сегодня, сегодня воскресенье). - Приложение все еще работает. - Открыл приложение в понедельник утром. - Добавлена ​​новая задача в понедельник. Он появится в сегодняшней задаче, верно? Нет !, он появляется в задачах Завтра. Исправить это не удастся, кроме как закрыть приложение из фона и снова запустить его.

Я думал, что performFetch обновляет контроллер выборки вместе со своим предикатом, но это не так. Есть ли исправление для этого?

ответ

0

Дата в предикатах фиксируется при их создании, т. Е. Ваши getStartDateForDay: и getEndDateForDay: не будут автоматически вызваны. Вам нужно обновить предикаты, когда вы обнаружите, что день изменился.

+0

Итак, мне нужно отслеживать изменения даты, как каждую секунду? –

+0

@ShatouDev Ну, не обязательно, например, вы могли бы сохранить текущую дату при создании предикатов, а затем всегда проверять, изменилась ли дата при возобновлении приложения из сна или фона. И если вам нужно обновить вживую, когда пользователь активно использует приложение в полночь, вы можете установить таймер для выхода в полночь, а не для активного опроса даты. (Также подумайте о том, как вы хотите, чтобы пользовательский интерфейс вел себя, может быть, не будет хорошо автоматически обновлять, если пользователь что-то делает ... возможно, есть какое-то действие, которое вы можете связать с проверкой даты?) – Arkku

+0

Лично я просто проверю дата активации приложения из фона/сна и когда пользователь делает что-либо, что вызывает обновление, в любом случае (например, создает/удаляет/редактирует задачу). – Arkku

Смежные вопросы