У меня есть приложение, которое вытягивает список лучших мест на flickr и возвращает последние фотографии, размещенные в этих местах.Это все делается динамически.Я также храню список последних изображений, которые пользователь просматривал в NSUserDefaults.Данные, которые нужны flickr для получения изображения, хранятся в NSDictionary, поэтому я записываю NSDictionary в массив, а затем сохраняю указанный массив в NSUserDefaults.Это для учебного проекта, поэтому я должен использовать NSUserDefaults, даже если есть лучший способ.
На этом этапе ПОЧТИ все работает отлично.Тем не менее, я не уверен в способе обновления последних изображений после того, как пользователь просматривает новое изображение в динамических представлениях.NSUserDefaults обновлений без проблем, и дополнительные последние изображения показывают, если я закрываю приложение и перезапускаю его.
Вот мой код, в котором я пишу по умолчанию.Кажется, здесь нет проблем.
idvc = [[ImageDisplayViewController alloc] init];
idvc.flickrInfo = [placePhotosArray objectAtIndex:[indexPath row]];
// Add data to NSUserDefaults
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *dataFromRecentArray = [currentDefaults objectForKey:@"recentImages"];
if (dataFromRecentArray != nil)
{
NSArray *oldArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataFromRecentArray];
if (oldArray != nil)
{
currentRecentImagesArray = [oldArray mutableCopy];
} else {
currentRecentImagesArray = [[NSMutableArray alloc] init];
}
} else {
currentRecentImagesArray = [[NSMutableArray alloc] init];
}
[currentRecentImagesArray addObject:idvc.flickrInfo];
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:currentRecentImagesArray] forKey:@"recentImages"];
[currentRecentImagesArray release];
[self.navigationController pushViewController:idvc animated:YES];
[idvc release];
Вот где я читаю данные обратно
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *dataFromRecentImages = [currentDefaults objectForKey:@"recentImages"];
if (dataFromRecentImages != nil) {
NSArray *currentArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataFromRecentImages];
recentImagesArray = [[NSArray alloc] initWithArray:currentArray];
}
}
Честно говоря, требования к заданию выполнены, я мог бы остановиться здесь, если бы захотел.Но я хотел бы понять, как это делается.Я очень хорошо умею экстраполировать примеры общего кода и применять его к моему, так что вам не нужно исправлять мою конкретную проблему.Просто нужно знать, как обновить переменную, значение которой устанавливается из пользовательских значений по умолчанию после обновления значений по умолчанию.