2017-04-04 7 views
0

私は、スケジュールのローテーションでクラスのリストを自動的に表示するアプリケーションを作っています。私は基本的な機能は完備していますが、私の目的は最初の打ち上げ時に回転数を入力し、月曜日から金曜日までバックグラウンドで増分させ、ではなく、週末にです。たとえば、ユーザーが金曜日にアプリをダウンロードしてその日を5日目に入力すると、月曜日まで5日間滞在してから6日目になります。ユーザーがいない場合は更新することもできますアプリを数日間開いてください。ここに私の現在のコードは次のとおりです。毎日午前0時に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

@意味 - ごめんなさい申し訳ありません、私は今日早くこれを書きました。私は主な2つの問題を説明するために編集しました。 – anthonya1999

+0

今はっきりしています。なぜあなたは、アプリケーションが開いていないときに更新したいですか?つまり、ユーザーがアプリを再び開いたときに次のローテーション番号を計算することができます。どのように通知されますか? –

答えて

0

サーバーがあり、定期的にコンテンツをダウンロードする必要がある場合は、background fetchをご覧ください。あなたはあなたが本当に持っているあなたの回転数の更新コードをそこに置くことができます。インターネット経由で読み込むコンテンツがない場合は、バックグラウンドフェッチを使用しないでください。平日はあなたに多くを助けるべき取得

NSDate* date = ...; 
NSInteger weekday = [[NSCalendar currentCalendar] component:NSCalendarUnitWeekday 
                fromDate:date]; 
関連する問題