Я пытаюсь отобразить некоторые данные JSON, полученные с веб-сайта, в виде таблицы. Изначально все работает отлично. Я объявляю свои данные JSON как переменную экземпляра:
var tableData:JSON!
{
didSet
{
tableView.reloadData()
}
}
И затем я делаю свой запрос где-то - viewDidLoad или viewWillAppear, или через пользователя, вытягивающего tableView для обновления или что-то еще, на самом деле не имеет значения - устанавливаю данные, и таблица перезагружается. Все отлично работает.
request(method, url, parameters: parameters, encoding: ParameterEncoding.URL).responseJSON(options: NSJSONReadingOptions.AllowFragments) { (request, response, json, error) -> Void in
self.tableData = JSON(json!)
}
Однако иногда я хочу не просто отображать данные, а позволить пользователю обновлять данные, например, в текстовом поле. И вот тут я сталкиваюсь с проблемами.
Итак, я создал ячейку табличного представления с текстовым полем, заполнил ее текстом, извлеченным из моего tableData JSON, пока все хорошо. Затем мой пользователь может изменить текстовое поле, и я хочу обновить tableData с помощью методов делегата текстового поля. Это не работает для меня.
func textFieldDidEndEditing(textField: UITextField)
{
let key = "anExampleKey"
tableData[key] = JSON(textField.text)
println(tableData[key]) // the original value, not textField.text
}
Кажется, ничего не происходит, значение tableData для "anExampleKey" остается неизменным. Итак, если эта ячейка прокручивается, например, за пределы экрана, а затем возвращается в поле зрения, любые изменения, внесенные моим пользователем, теряются, и она возвращается к исходному значению.
Однако это проблема исключительно со значением JSON, созданным из запроса Alamofire. Например, если я сделаю это:
func textFieldDidEndEditing(textField: UITextField)
{
let key = "anExampleKey"
var json = JSON([key:tableData[key].stringValue])
tableData[key] = JSON(textField.text)
json[key] = JSON(textField.text)
println(tableData[key]) // the original value, not textField.text
println(json[key]) // textField.text
}
Переменная json будет обновлена, чтобы отразить текстовое поле, в то время как tableData по-прежнему будет иметь исходное значение, а не то, что находится в текстовом поле. Кто-нибудь знает, почему объект JSON, созданный с помощью запроса Alamofire, является неизменным, а объект, созданный непосредственно из словаря, - нет?