Вместо того, чтобы хранить BOOL
, вы могли сохранить дату/время (NSDate
) последнего тасования.
Затем проверьте, прошло ли оно полночь с момента последнего перетасовки, сравнив сохраненную дату и текущую дату в viewDidAppear
.
См NSTime
Документация: http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html
И NSDateFormatter
Документация: https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003643
UPDATE:
В соответствии с просьбой, вот некоторые примеры кода. По общему признанию, там очень хорошо могут быть лучшие решения, но я считаю, что этот фрагмент кода поможет вам преодолеть вашу проблему. Что это значит, проверьте, есть ли дата, сохраненная с использованием NSUserDefaults
, а затем сравните ее с текущей датой. Если даты не совпадают, перетасуйте массив, затем сохраните текущую дату (снова используя NSUserDefaults
). (Я взял на себя смелость сделать предположение о том, что время действительно будет продолжать двигаться вперед, так что это не проверить, чтобы убедиться, что lastSavedDate
является перед тем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"];
На данный момент, у вас нет реальной причины проверять время, но я включил его, если вам было любопытно.
// 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]);
Это будет один из способов, но вам также нужно будет сохранить состояние предметов, которые вы «перетасовываете», и загружать их. –
Объекты массива поступают из CoreData, поэтому они уже сохранены. Метод просто загружает их в массив и перемещает их в другой массив. – RoshDamunki