如何快速在VC之间使用领域传递和更新数据

时间:2019-06-17 12:31:11

标签: ios swift realm

大家好,我是第一次使用该网站,首先我要说我是Swift的初学者,也为我的英语不好而感到抱歉。好吧,我正在尝试使用Realm数据模型将数据从View Controller的TextView传递回Tableview Controller。  我只想使用一个数据类[Called Note]来执行此操作。我可以将数据从表视图转发到视图控制器,但是问题是我无法将数据转发回去。仅仅因为我想使用一个数据类,我实际上不知道该怎么做。在Textview中更新领域之后,我应该在哪里使用领域更新我的数据。 我遇到的另一个问题是我无法指定我选择的哪一行(indexPath)[我的意思是在代码中]将数据发送回该确切的行。当您有两个/多个模型类使用关系时,有一种方法,但是正如我所说,我不想使用多个类。那么这是解决此问题的一种方法,还是我的数据模型应该使用多个类?谢谢回答 这是我来自MainTableViewController,数据模型类和Viewcontroller的代码:

数据模型:

import Foundation
import RealmSwift

class Note: Object {

    @objc dynamic var title: String = ""
    @objc dynamic var dateCreated: Date?
}

viewController:

import UIKit
import RealmSwift

protocol RecieveData {
    func sendingDataBack(data: Note)
}

class ViewController: UIViewController,UITextViewDelegate {

    @IBOutlet weak var textView: UITextView!

    let realm = try! Realm ()
    var delegate: RecieveData?

    var tempText: String?
    var noteMessages: Note?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        textView.delegate = self
        textView.text = tempText
    }

    func textViewDidEndEditing(_ textView: UITextView) {
        textView.isEditable = true
    }
}


MainTableViewController:

import UIKit
import RealmSwift

class MainTableViewController: UITableViewController, RecieveData {




    let realm = try! Realm()
    var noteArray: Results<Note>?

    override func viewDidLoad() {
        super.viewDidLoad()
        loadData()

    }

    // MARK: - Table view data source


    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return noteArray?.count ?? 1
    }
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = noteArray?[indexPath.row].title ?? "add new title"
        cell.detailTextLabel?.text = noteArray?[indexPath.row].title ?? ""
        return cell
    }

    // MARK: - Table View Delegate Methods:

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "goToSecondVC", sender: self)
    }

    // Data Manipulation Methods

    func saveData(data: Note) {

        do {
            try realm.write {
                realm.add(data)
            }
        } catch {
            print("saving data failed! \(error)")
        }
        tableView.reloadData()
    }

    func loadData () {
        noteArray = realm.objects(Note.self).sorted(byKeyPath: "dateCreated", ascending: true)
        tableView.reloadData()
    }

    // MARK: - Passin Data Between View Controllers Methods

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "goToSecondVC" {
            let detailVC = segue.destination as! ViewController
            detailVC.delegate = self
            if let indexPath = tableView.indexPathForSelectedRow {

                detailVC.tempText = noteArray?[indexPath.row].title
            }
        }
    }

    func sendingDataBack(data: Note) {

    }

}

0 个答案:

没有答案