Обновить объекты в RealmSwift? - PullRequest
0 голосов
/ 09 ноября 2018

Я знаю, что вокруг много подобных вопросов - я боюсь, что моя проблема находится на таком базовом уровне, что все остальные вопросы, которые я мог бы найти, намного сложнее, и, тем не менее, похоже, не совсем отвечают на это.

Я внедряю «Настройки» в своем приложении для дневников - и мне нужно позволить пользователю иметь возможность редактировать (среди прочего) название дневника.

Чтобы понять мою проблему: для начала в приложении у вас есть tableView со всеми текущими дневниками - затем, когда вы вводите конкретный дневник, именно здесь вы найдете «Настройки» для редактирования этого конкретного дневника.

Здесь, при нажатии на tableViewCell с именем «Имя дневника», вы вводите простой viewController с textField (содержащим ваше текущее имя дневника) и кнопку, которая вернет вас назад и изменит имя дневника на новое.введите в этом текстовом поле.

Вот мой текущий код на этой «кнопке сохранения»:

@IBAction func saveChanges(_ sender: Any) {
let newDiaryName = Diaries() // Here, I need to reach the specific diary that we are currently editing!
diary?.diaryName = changeDiaryNameTextField.text!

let realm = try! Realm()
    try! realm.write {
        realm.add(newDiaryName)
    }
self.navigationController?.popViewController(animated: true)
}
}

Извините, но я новичок в этом мире ...

Мой вопрос: как, черт возьми, я могу добраться до конкретного дневника, в котором я сейчас нахожусь?- И является ли эта функция даже правильной для использования при обновлении объекта?

Вернувшись к первому табличному представлению со списком всех дневников, я сохранил дневники примерно так:

(так что я предполагаю, что один дневник похож на allDiaries [indexPath] .. Нокак мне этого достичь из всего этого другого viewController?)

let allDiaries: Results<Diaries>

required init?(coder aDecoder: NSCoder) {
    let realm = try! Realm()
    allDiaries = realm.objects(Diaries.self).sorted(byKeyPath: String("dateCreated"), ascending: false)
    super.init(coder: aDecoder)
}

Извините за длинное объяснение, я не знал, как спросить иначе!

Спасибо!

1 Ответ

0 голосов
/ 09 ноября 2018

Предположим, ваш Dairy контроллер представления, в котором вы сохраняете имя DairyViewControll, и вы открываете его из DairiesViewController. Поскольку я не знаю, представляете ли вы это или нажимаете (Storyboard segue), я покажу оба случая.

Основная идея состоит в том, чтобы назначить ваш молочный объект до настоящего времени.

class DairiesViewController: UIViewController {

    //open selected dairy, the first option if you present it, second via segue

1. present

    func openDairy(diary: Dairy) {
        let storyboard = UIStoryboard(name: "main", bundle: nil) //please make sure your storyboard is "main" otherwise change name
        let dairyVC = storyBoard.instantiateViewController(withIdentifier: "dairyIdentifier") as! DairyViewControll
        dairyVC.dairy = dairy
        self.present(dairyVC, animated: true, completion: nil)
    }
}

2. via segue

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
     let dairyVC = segue.destination as! DairyViewControll
     dairyVC.dairy = self.dairy // holds selected dairy
 }

class DairyViewControll: UIViewController {
    let dairy: Dairy! // the dairy user selects to edit
    @IBAction func saveChanges(_ sender: Any) {
        // you save method is here
    }
}
...