2014-10-29 92 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

你可能已經發現你忽略的關鍵'的最後一個值@「名」',所以從字面上你只儲存的最後指標 - 而不是選擇指數的集,所以我贏了」不要提這樣明顯的事情...... – holex 2014-10-29 15:03:35

+1

你真的不需要調用'synchronize'。 – zaph 2014-10-29 15:12:47

回答

0

您每次都要更換與@"name"鍵相關的值。請考慮使用NSArray作爲值,在selectdeselect委託方法中對其進行修改。例如:

// 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

感謝您的建議。每次我點擊:[數組addObject:car.name];我收到一個錯誤[__NSCFString count]:發送給實例的無法識別的選擇器。我試着將car.name改爲一個字符串。有任何想法嗎? – Ryasoh 2014-10-30 02:36:24

+0

我不確定發生了什麼,但它停止傳遞錯誤。現在就像魅力一樣。 – Ryasoh 2014-10-30 13:18:53