2017-04-04 4 views
0

Ich mache eine App, die automatisch eine Liste von Klassen in einer Zeitplan-Rotation zeigt. Ich habe die Kernfunktionalität abgeschlossen, aber mein Ziel ist es, den Benutzer die Rotationsnummer beim ersten Start eingeben und dann Montag-Freitag im Hintergrund und nicht an den Wochenenden erhöhen. Wenn der Benutzer beispielsweise die App an einem Freitag herunterlädt und diesen Tag als Tag 5 eingibt, sollte er Tag 5 bis Montag bleiben und dann Tag 6 werden. Ich möchte auch, dass er ihn aktualisiert, wenn der Benutzer dies nicht tut öffne die App für ein paar Tage. Hier ist mein aktueller Code:NSUserDefaults-Nummer jeden Tag um Mitternacht erhöhen (ohne Wochenenden)

- (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]; 
    } 
} 

Das Problem ist, dass mein Verständnis kann iOS nur dies überprüfen, wenn die Anwendung geöffnet wird, nicht im Hintergrund, ist das richtig? Und das bedeutet nicht, dass die Werte am Wochenende nicht erhöht werden.

+0

Sie uns erraten Entlassen, was mit diesem Code falsch? Ich würde vorschlagen, dass du es uns erzählst. –

+0

@ Bedeutung-Angelegenheiten Es tut mir leid, schrieb ich heute früh in Eile. Ich habe die wichtigsten 2 Probleme bearbeitet. – anthonya1999

+0

Es ist jetzt klar. Warum möchten Sie aktualisieren, wenn die App nicht geöffnet ist? Ich meine, die Berechnung der nächsten Umdrehungszahl kann erfolgen, wenn der Benutzer die App erneut öffnet, wie würde er es bemerken? –

Antwort

0

Wenn Sie einen Server haben und auch regelmäßig Inhalte herunterladen müssen, sehen Sie sich background fetch an. Sie könnten dann Ihren Rotationsnummern-Update-Code dort eingeben, wo Sie wirklich müssen. Beachten Sie, dass Sie keinen Hintergrundabruf verwenden sollten, wenn Sie keine Inhalte über das Internet laden.

den Wochentag bekommen sollten Sie viel helfen:

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