2014-10-29 2 views
0

У меня есть кнопка, которая переключается с выбранного на невыбранный. Когда пользователь меняет его на выбранный, я хочу, чтобы он сохранил настройки. При повторном входе в представление таблицы все выбранные ранее кнопки должны быть выбраны, но это не так. С моим кодом я могу установить одну строку, но если я выберу несколько строк, останется только последний. Вот что я пытался:NSUserDefaults не сохранит выбор для нескольких строк.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

// code... 

    if([cell.nameLbl.text isEqualToString:[[NSUserDefaults standardUserDefaults] objectForKey:@"name"]]){ 
     [cell.likeBtn setSelected:YES]; 
    }else{ 
     [cell.likeBtn setSelected:NO]; 
    } 
} 

И в методе делегата для моего TableViewCell

-(void)tableViewCell:(TableViewCell *)cell { 
//code... 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
    Car *car = self.carArray[indexPath.row]; 
    NSUserDefaults *userPreferences = [NSUserDefaults standardUserDefaults]; 
    [userPreferences setObject:car.name forKey:@"name"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

Что не хватает для хранения нескольких выбранных строк?

+1

вы, вероятно, заметили перекручивание последнего значения ключа '@«имя»', так что буквально вы храните самое последний индекс только - не _set_ выбранных показателей, так что я выиграл» t упоминать такую ​​очевидную вещь ... – holex

+1

Вам действительно не нужно вызывать 'synchronize'. – zaph

ответ

0

Вы заменяете значение, связанное с ключом @"name" каждый раз. Вместо этого рассмотрите использование значения NSArray в качестве значения, изменив его в методах делегатов select и deselect. Пример:

// select 
NSMutableArray *array = [NSMutableArray arrayWithArray:[userPreferences objectForKey:@"names"]]; 
[array addObject:car.name]; 
[userPreferences setObject:array forKey:@"names"]; 

// deselect 
NSMutableArray *array = [NSMutableArray arrayWithArray:[userPreferences objectForKey:@"names"]]; 
[array removeObject:car.name]; 
[userPreferences setObject:array forKey:@"names"]; 
+0

Спасибо за предложение. Каждый раз, когда я нажимаю: [array addObject: car.name]; Я получаю сообщение об ошибке [__NSCFString count]: непризнанный селектор, отправленный экземпляру. Я попытался сменить car.name на строку. Есть идеи? – Ryasoh

+0

Я не уверен, что произошло, но он прекратил выдавать ошибку. Сейчас работает как шарм. – Ryasoh

Смежные вопросы