0

3 개의 가져 오기 컨트롤러를 사용하여 3 개의 작업 목록을 필터링합니다. 오늘, 내일, 그리고 마지막으로 나중에 할 일. 이 경우 세 가지 조건이 있습니다.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]]; 

나는 그것을 만족스럽게 생각합니다. 그것은 매력처럼 작동했습니다. 밤이 지나기 전까지는 다음과 같은 문제에 직면했습니다. 3 개의 컨트롤러는 업데이트되지 않습니다.

예 : - 일요일에 앱을 시작했습니다. (자, 오늘은 일요일입니다.) - 앱이 아직 실행 중입니다. - 월요일 아침에 앱을 열었습니다. - 월요일에 새로운 작업이 추가되었습니다. 그것은 오늘의 일에서 나타날 것입니다, 맞습니까? 아니오!, 내일의 작업에 나타납니다. 앱을 배경에서 종료하고 다시 시작하는 것을 제외하고는 그 어떤 문제도 해결할 수 없습니다.

나는 performFetch이 술어와 함께 가져 오기 컨트롤러를 업데이트한다고 생각했지만 그렇지 않습니다. 그 문제가 수정 되었습니까?

답변

0

술어를 만들 때 술어의 날짜가 고정됩니다. 즉, getStartDateForDay:getEndDateForDay:은 자동으로 다시 호출되지 않습니다. 요일이 변경되었음을 감지하면 술어를 갱신해야합니다.

+0

그래서 매 초마다 날짜 변경 사항을 추적해야합니까? –

+0

@ShatouDev 글쎄, 꼭 그렇지는 않습니다. 예를 들어, 술어를 만들 때 현재 날짜를 저장할 수 있습니다. 그런 다음 응용 프로그램이 수면이나 배경에서 다시 활성화 될 때 날짜가 변경되었는지 항상 확인하십시오. 사용자가 자정에 앱을 활발하게 사용하고있을 때 실시간으로 업데이트해야하는 경우 타이머를 적극적으로 폴링하는 대신 자정에 타이머를 설정할 수 있습니다. (또한 사용자 인터페이스가 작동하는 방법을 고려하십시오. 사용자가 뭔가를하고 있다면 자동으로 새로 고치는 것이 좋지 않을 수 있습니다. 날짜 확인을 할 수있는 작업이 있습니까?) – Arkku

+0

개인적으로 나는 백그라운드/수면에서 앱 활성화에 대한 날짜, 그리고 사용자가 어쨌든 업데이트를 유발하는 작업을 수행 할 때 (예 : 작업 생성/삭제/수정). – Arkku

관련 문제