Anstatt BOOL
zu speichern, können Sie Datum/Uhrzeit (NSDate
) des letzten Shuffle speichern.
Dann überprüfen Sie, ob es Mitternacht seit dem letzten Mischen vergangen ist oder nicht, indem Sie das gespeicherte Datum und das aktuelle Datum in viewDidAppear
vergleichen.
Siehe NSTime
Dokumentation: http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html
Und NSDateFormatter
Dokumentation: https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003643
UPDATE:
Wie gewünscht, hier einige Codebeispiele. Zugegebenermaßen gibt es sehr wohl bessere Lösungen dafür, aber ich glaube, dass dieses Code-Snippet Ihnen helfen wird, Ihr Problem zu überwinden. Überprüfen Sie, ob ein Datum mit NSUserDefaults
gespeichert wurde, und vergleichen Sie es mit dem aktuellen Datum. Wenn die Daten nicht übereinstimmen, mischen Sie das Array und speichern Sie das aktuelle Datum (erneut unter Verwendung von NSUserDefaults
). (Ich habe die Freiheit, unter der Annahme, genommen, dass die Zeit in der Tat nach vorne bewegen wird weiter, so dass es nicht überprüft, um sicherzustellen, dass lastSavedDate
ist vor die 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"];
An diesem Punkt, Es gibt keinen wirklichen Grund für Sie, die Zeiten zu überprüfen, aber ich habe es aufgenommen, falls Sie neugierig waren.
// 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]);
Das wäre eine Möglichkeit, aber Sie müssten auch den Zustand der Elemente speichern, die Sie "mischen" und diese auch laden. –
Die Array-Objekte stammen von CoreData, daher sind sie bereits gespeichert. Die Methode lädt sie einfach in ein Array und mischt sie in ein anderes Array. – RoshDamunki