2017-04-04 10 views
0

일정 순환으로 클래스 목록을 자동으로 보여주는 앱을 만들고 있습니다. 핵심 기능이 완전하지만 내 목표는 사용자가 첫 번째 실행시 순환 게재 번호를 입력 한 다음 월요일부터 금요일까지 백그라운드에서 증분시키고 주말에는 이 아닌이되도록하는 것입니다. 예를 들어 사용자가 금요일에 앱을 다운로드하고 그 날을 5 일째로 입력하면 월요일까지 5 일 남았고 6 일째가됩니다. 사용자가 그렇지 않은 경우 업데이트하고 싶습니다. 며칠 동안 앱을 엽니 다.자정 (주말 제외) 매일 NSUserDefaults 수를 늘립니다.

- (void)checkIfDayChanged { 
NSDate *open = [userDefaults objectForKey:@"openDate"]; 
NSDate *close = [userDefaults objectForKey:@"closeDate"]; 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 

[dateFormat setDateFormat:@"yyyy-MM-dd"]; 

NSString *openString = [dateFormat stringFromDate:open]; 
NSString *closeString = [dateFormat stringFromDate:close]; 

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
BOOL weekend = [gregorian isDateInWeekend:open]; 

NSTimeInterval distanceBetweenDates = [close timeIntervalSinceDate:open]; 
NSInteger days = ((NSInteger)distanceBetweenDates)/(60 * 60 * 24); 

if (![openString isEqualToString:closeString]) { 
    if (!weekend) { 
     [userDefaults setInteger:[userDefaults integerForKey:@"dayNumber"] + days forKey:@"dayNumber"]; 
     [userDefaults synchronize]; 
    } 
} 

문제는 응용 프로그램이없는 백그라운드에서 열릴 때 나의 이해, 아이폰 OS는이를 확인할 수 있다는 것입니다이 올바른지, : 여기에 내 현재 코드는? 또한 주말에 값을 증가시키지 않는 것을 고려하지 않습니다.

+0

는 당신이 우리가이 코드를 잘못 추측 무엇시키는 있습니까를? 네가 우리에게 말해 줄 것을 권하고 싶다. –

+0

@ meaning-matters 미안하지만 오늘은 서두르다. 주요 2 가지 문제점을 설명하기 위해 편집했습니다. – anthonya1999

+0

이제 분명합니다. 앱이 열리지 않을 때 왜 업데이트하고 싶습니까? 내 말은, 사용자가 앱을 다시 열 때 다음 회전 수를 계산하면 어떻게 알 수 있습니까? –

답변

0

서버가 있고 주기적으로 콘텐츠를 다운로드해야하는 경우 background fetch을 확인하십시오. 그런 다음 회전 수를 업데이트 코드로 입력하면됩니다. 인터넷을 통해로드 할 콘텐츠가없는 경우 배경 가져 오기를 사용하지 않아야합니다.

평일 얻기 당신에게 많은 도움이 될 것입니다

NSDate* date = ...; 
NSInteger weekday = [[NSCalendar currentCalendar] component:NSCalendarUnitWeekday 
                fromDate:date];