0

В настоящее время у меня есть список дел. При выборе строки alpha тускнеет, указывая, что задача выбрана или «завершена». Я энергично искал здесь, как сохранить выбранное состояние ячейки до NSUserDefaults.Swift - Сохранить выбор ячейки в NSUserDefaults

Мои ViewController:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

var defaults = NSUserDefaults.standardUserDefaults() 

@IBOutlet weak var toDoListTable: UITableView! 


override func viewDidLoad() { 
    super.viewDidLoad() 

    if defaults.objectForKey("toDoList") != nil { 

     toDoList = defaults.objectForKey("toDoList") as [String] 

    } 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return toDoList.count 

} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell 

    return cell 

} 


func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    var selectedCell = tableView.cellForRowAtIndexPath(indexPath)! 
    selectedCell.contentView.alpha = 0.3 



} 

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 

    var deselectedCell = tableView.cellForRowAtIndexPath(indexPath)! 
    deselectedCell.contentView.alpha = 1.0 

} 






func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 

    if editingStyle == UITableViewCellEditingStyle.Delete { 

     toDoList.removeAtIndex(indexPath.row) 

     toDoListTable.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Left) 

     defaults.setObject(toDoList, forKey: "toDoList") 



    } 

} 


override func viewDidAppear(animated: Bool) { 
    toDoListTable.reloadData() 

} 


} 

Я считаю, что я просто имею вопрос назвав его /, пытаясь выяснить, где называть его в. Любая помощь будет принята с благодарностью.

EDIT ** Что я сейчас сохраняю в содержимом, хранящемся с UITextField.

+0

Не могли бы вы предоставить дополнительную информацию? Как получить выбор из пользовательских настроек по умолчанию? Вы пытались распечатать, если выбор ячейки действительно сохранен? Как установить выбор ячейки после получения значений по умолчанию пользователя? На самом деле, в чем проблема? –

+0

В чем проблема? –

+0

Вы должны использовать IF LET, чтобы развернуть свой вариант вместо того, чтобы делать это дважды. если let toDoList = NSUserDefaults(). stringArrayForKey ("toDoList") как? [String] {...} –

ответ

0

Проблема в том, что она не экономит?

Вы можете попробовать calling synchronize, чтобы сохранить его на диске, чтобы узнать, не имеет значения, хотя это не обязательно.

+0

Я пробовал это без везения. – JohnJLilley

0

NSIndexPath - это свойство NSInteger. Это не объект. Используйте setInteger (_: forKey :) вместо этого. Ответ @Van Du Tan для defaults.setValue(indexPath.row, forKey: "selection") может не работать, потому что вы должны инкапсулировать строку внутри объекта NSValue.

+0

Я не думаю, что это проблема. Я тестировал это как с setObject, так и с setValue при передаче NSInteger, и он сохраняет штраф для обоих в Swift. –

+0

Хм, ты прав, я думал в контексте коллекций obj-c :) –

0

Во-первых, я буду считать, что у вас есть линия объявляющий NSUserDefaults:

let defaults = NSUserDefaults.standardUserDefaults() 

Я считаю, что вы пытаетесь сделать, это сохранить альфа (предполагая, что состояние) по отношению к ряду ваш выбора. В таком случае

let key = "myTableViewWithRowOf\(indexpath.row)" 
defaults.setFloat(selectedCell.contentView.alpha, forKey: key) 

Вы можете получить эти данные с помощью метода floatForKey.

В идеале, хотя вам может понадобиться NSArray, связанный с вашим табличным представлением, и сохраните его с помощью defaults.setObject(...). Таким образом, когда ваши приложения загружаются, вы можете вызывать весь массив и перебирать его, восстанавливая «состояния».

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