Я делаю простое приложение для работы с CRUD с Firebase - добавление, обновление и удаление. Я выполнил их все, за исключением того, что у меня проблема с обновлением.Поиск старой ценности предмета в Firebase после обновления
Я могу получить ссылку на нужного пользователя при обновлении дочернего значения и успешно его обновить в консоли firebase. Это код, который я использовал для этого:
let ref = FIRDatabase.database().reference().child("Users")
ref.observeEventType(.ChildAdded, withBlock: { (snapshot) in
guard let dictionary = snapshot.value as? [String:AnyObject] else { return }
if self.firstNameField.text == dictionary["firstname"] as? String
{
if let lastname = dictionary["lastname"]
{
print("Here is the lastname of the current person \(lastname)")
guard let firstname = self.firstNameField.text, lastname = self.lastNameField.text, dateOfBirth = self.dateOfBirthField.text, zipcode = Int(self.zipcodeField.text!) else
{
print("Form not valid")
return
}
let properties: [String: AnyObject] = ["firstname": firstname, "lastname": lastname, "Date of Birth": dateOfBirth, "Zipcode": zipcode]
let currentKey = snapshot.key
ref.child(currentKey).updateChildValues(properties, withCompletionBlock: { (error, ref) in
if error != nil
{
print("We have an error updating the data \(error)")
}
print("We were able to update the entry in the reference \(ref)")
})
}
}
}, withCancelBlock: nil)
Мой вопрос заключается в TableViewController не обновляя надлежащего индекса, как только я уволить EditViewController. Метод tableview.reloadData() для этого не работает, поэтому я считаю, что мне нужно исправить его в моем методе ChildChanged. Вот код для этого:
ref.observeEventType(.ChildChanged, withBlock: { (snapshot) in
print("One of the entries were changed so we're reloading the table view")
if let firstname = snapshot.value?.objectForKey("firstname"), lastname = snapshot.value?.objectForKey("lastname")
{
let fullname = "\(firstname) \(lastname)"
self.names[I_Need_This_Index] = fullname
print(fullname)
dispatch_async(dispatch_get_main_queue())
{
self.tableView.reloadData()
}
}
}, withCancelBlock: nil)
Код выше в методе, называемом observePeople(), который вызывается при методе viewDidLoad. Метод observPeople() обрабатывал уведомления ChildAdded, ChildRemoved и ChildChanged.
Как я могу правильно перейти к старому индексу и изменить старое значение на новое значение, чтобы представление таблицы обновилось правильно?
Просто измените 'dataSource [indexOfCellThatChanged]' в момент обновления значений .-> Вызовите reloadTableView. – Dravidian
что бы я его изменил? И как мне получить доступ к нему из моего другого контроллера? –