Invece di memorizzare un BOOL
, è possibile memorizzare la data e l'ora (NSDate
) dell'ultimo shuffle.
Quindi verificare se è passata o meno la mezzanotte dall'ultimo shuffle confrontando la data memorizzata e la data corrente nel viewDidAppear
.
Vedi NSTime
Documentazione: http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html
E NSDateFormatter
Documentazione: https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003643
UPDATE:
Come richiesto, ecco alcuni esempi di codice. Certo, molto bene potrebbero essere soluzioni migliori a questo, ma credo che questo frammento di codice ti aiuterà a superare il tuo problema. Ciò che fa è controllare se c'è una data salvata usando NSUserDefaults
, quindi confrontare con la data corrente. Se le date non corrispondono, mischiare l'array, quindi salvare la data corrente (utilizzando nuovamente NSUserDefaults
). (Mi sono preso la libertà di fare l'ipotesi che il tempo sarà davvero continuare ad andare avanti, in modo che non controlla per assicurarsi che sia lastSavedDate
prima il currentDate
.)
NSDate *currentDate = [[NSDate alloc] init];
NSDate *lastShuffleDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastShuffleDate"];
// check to see if there is a prior shuffle date
// if there is not, shuffle the array and save the current date
if (!lastShuffleDate) {
NSLog(@"No object set for 'lastShuffleDate'");
//[self shuffleMyArray];
[[NSUserDefaults standardUserDefaults] setObject:currentDate forKey:@"lastShuffleDate"];
return;
}
// set up the date formatter
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormatter setLocale:usLocale];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
NSLog(@"Current Date: %@", [dateFormatter stringFromDate:currentDate]);
NSLog(@"Saved Date: %@", [dateFormatter stringFromDate:lastShuffleDate]);
// check to see if the dates are the same by comparing the dates as a string
if (![[dateFormatter stringFromDate:currentDate] isEqualToString:[dateFormatter stringFromDate:lastShuffleDate]]) {
NSLog(@"Dates are different...!");
//[self shuffleMyArray];
} else {
NSLog(@"Dates are the same... (midnight has not passed)");
}
// save the time of the last shuffle
[[NSUserDefaults standardUserDefaults] setObject:currentDate forKey:@"lastShuffleDate"];
A questo punto, non c'è una vera ragione per controllare gli orari, ma l'ho incluso nel caso fossi curioso.
// remote dateStyle and set timeStyle to check times
[dateFormatter setDateStyle:NSDateFormatterNoStyle];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
NSLog(@"Current Time: %@", [dateFormatter stringFromDate:currentDate]);
NSLog(@"Saved Time: %@", [dateFormatter stringFromDate:lastShuffleDate]);
Questo sarebbe un modo, ma avresti anche bisogno di salvare lo stato degli elementi che stai "mescolando" e caricare anche quelli. –
Gli oggetti array provengono da CoreData in modo che siano già stati salvati. Il metodo li carica semplicemente in un array e li mescola in un altro array. – RoshDamunki