У меня есть объект панели вкладок, который показывает пользовательское избранное в tableview. У меня есть другой объект панели вкладок, который показывает представление и позволяет пользователю добавлять фаворита.
Обновление
этот массив фаворитов читается из NSUserDefaults в viewDidLoadMethod класса, который создает, и добавьте фаворита.
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
NSArray *prefs = [def arrayForKey:@"addedQuotes"];
userAddedQuotes = [[NSMutableArray alloc] initWithArray:prefs];
затем этот код выполняется, когда пользователь на самом деле добавляет фаворита
if([text1.text length] && [text2.text length])
{
NSString *temp = [NSString stringWithFormat:@"%@^%@",
text1.text, text2.text];
[userAdded addObject:temp];
NSUserDefaults *myDefault = [NSUserDefaults standardUserDefaults];
[myDefault setObject:userAdded forKey:@"addedFavorites"];
В tableview классе, который загружает этот массив из NSUserDefaults для отображения значений, я использую следующее в viewWillAppear методе.
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
NSArray *prefs = [def arrayForKey:@"addedFavorites"];
favorites = [[NSMutableArray alloc] initWithArray:prefs];
В данный момент, если я добавляю фаворита и затем перехожу к выставочному представлению вкладки избранного, оно не загружает недавно добавленные объекты. только, когда я выхожу (нажмите кнопку "Домой"), и запустите приложение снова.
Как я могу заставить представление читать из userdefaults снова, когда объект панели вкладок выбран, и представление показывают?
С уважением
Пробовали ли вы вызвать синхронизацию?
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults synchronize];
Обновление для комментариев ниже - Ваша таблица должна использовать данные из массива, в который загружены NSUserDefaults
.
Ваша cellForRowAtIndexPath
должна выглядеть примерно так (если вы повторно используете ячейки таблицы, что и должно быть)
...
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
// update cell
cell.textLabel.text = [myUserDefaultsArray objectAtIndex:indexPath.row];
NSLog(@"The table data should be %@", [myUserDefaultsArray objectAtIndex:indexPath.row]);
return cell;
Вы можете быстро отобразить содержимое массива, чтобы убедиться, что он обновляется при появлении представления, сделав следующее при появлении представления (предполагается, что вы уже загрузили свой массив)
int i = 0;
for (i; i<=[myUserDefaultsArray count] - 1; i++) {
NSLog(@"data is %@ for row %d", [myUserDefaultsArray objectAtIndex:i], i);
}