Вид не будет перечитывать пользовательские значения по умолчанию при выборе в панели вкладок - PullRequest
1 голос
/ 15 июля 2010

У меня есть элемент панели вкладок, который показывает избранное пользователей в виде таблицы. У меня есть еще один элемент панели вкладок, который показывает вид и позволяет пользователю добавлять избранное.

Обновление

этот массив избранного читается из 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];

В настоящий момент, если я добавляю избранное, а затем перехожу на представление вкладки «Показать избранные», оно не загружает вновь добавленные элементы. только когда я выхожу (нажмите кнопку «Домой») и снова запускаю приложение.

Как я могу получить представление для чтения от пользователя по умолчанию снова, когда элемент панели вкладок выбран, и представление отображается?

Привет

1 Ответ

2 голосов
/ 15 июля 2010

Вы пытались вызвать синхронизацию на нем?

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...