Привычка представления перечитала пользовательские значения по умолчанию при выборе в панели вкладок

У меня есть объект панели вкладок, который показывает пользовательское избранное в 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 снова, когда объект панели вкладок выбран, и представление показывают?

С уважением

1
задан jarryd 15 July 2010 в 06:35
поделиться

1 ответ

Пробовали ли вы вызвать синхронизацию?

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);
}
2
ответ дан 2 September 2019 в 23:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: