2017-04-04 49 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]; 
    } 
} 

的問題是,我的理解,iOS的只能當應用程序被打開,而不是在後臺檢查這一點,這是正確的?而且,這並沒有說明週末不增加價值。

+0

你讓我們猜什麼不對的代碼?我建議你告訴我們。 –

+0

@意義 - 事情我很抱歉,我今天早些時候寫這個很急。我編輯解釋了主要的兩個問題。 – anthonya1999

+0

現在很清楚。爲什麼要在應用程序未打開時更新?我的意思是,當用戶再次打開應用程序時,可以計算下一個旋轉數,他會如何注意? –

回答

0

如果您有服務器並且還需要定期下載內容,請查看background fetch。然後,你可以把你的輪換號碼更新代碼放在那裏,你真的不得不這樣做。請注意,如果您沒有要通過互聯網加載的內容,則不應使用後臺提取。

獲取平日應該幫助你很多:

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