2017-04-04 1 views
0

Je crée une application qui affiche automatiquement une liste de classes dans une rotation de programme. J'ai la fonctionnalité de base complète, mais mon objectif est d'avoir l'utilisateur entrer le numéro de rotation au premier lancement, puis incrémenter du lundi au vendredi en arrière-plan, et pas le week-end. Par exemple, si l'utilisateur télécharge l'application un vendredi et entre ce jour-là comme un jour 5, il devrait rester le jour 5 jusqu'à lundi, puis deviendrait le jour 6. Je voudrais également le mettre à jour si l'utilisateur ne le fait pas Ouvrez l'application pendant quelques jours. Voici mon code actuel:Incrémenter le numéro NSUserDefaults chaque jour à minuit (excluant les weekends)

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

Le problème est que ma compréhension, iOS ne peut vérifier lorsque l'application est ouverte, pas en arrière-plan, cela est exact? Et aussi, cela ne tient pas compte de ne pas incrémenter les valeurs le week-end.

+0

Êtes-vous nous laissant deviner ce qui ne va pas avec ce code? Je vous suggère de nous le dire. –

+0

@ sens-questions Je suis désolé, je l'ai écrit plus tôt aujourd'hui. J'ai édité pour expliquer les 2 principaux problèmes. – anthonya1999

+0

C'est clair maintenant. Pourquoi voulez-vous mettre à jour lorsque l'application n'est pas ouverte? Je veux dire, calculer le prochain numéro de rotation peut être fait quand l'utilisateur ouvre à nouveau l'application, comment le remarquerait-il? –

Répondre

0

Si vous avez un serveur et devez également télécharger du contenu régulièrement, jetez un oeil à background fetch. Vous pouvez alors mettre votre code de mise à jour de numéro de rotation dans ce que vous devez vraiment faire. Sachez que vous ne devez pas utiliser l'extraction d'arrière-plan si vous n'avez aucun contenu à charger sur Internet.

Obtenir la semaine devrait vous aider beaucoup:

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