Как использовать NSPredicate для извлечения запроса и заполнения второго viewController данными, когда в первом viewController нажимается рулон UItableView - PullRequest
0 голосов
/ 27 марта 2019

Я кодирую приложение Note в Swift 4. Корневой ViewController (NoteListViewController) заполняется при заполнении текстового поля secondViewController (ComposeNoteViewController) и TextView. Проблема в том, что, когда я нажимаю заполненную ячейку TableView, а не извлекаю и отображаю содержимое, он открывает новый экземпляр ComposeNoteViewController.

import UIKit
import CoreData

class NoteListTableViewController: UITableViewController {

    var noteListArray = [NoteListItem]()



    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    override func viewDidLoad() {
        super.viewDidLoad()


        loadNoteListItem()
    }


    // MARK: - Table view data source


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

        return noteListArray.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "NoteListItemCell", for: indexPath)


        cell.textLabel?.text = noteListArray[indexPath.row].title

        return cell
    }

    //MARK: - TABLEVIEW DELEGATE METHODS
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        performSegue(withIdentifier: "goToComposeNote", sender: self)

        tableView.deselectRow(at: indexPath, animated: true)

    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        let destinationVC = segue.destination as! ComposeNoteViewController

        if let indexPath = tableView.indexPathForSelectedRow {
            destinationVC.selectedNoteList = noteListArray[indexPath.row]
        }
    }

import UIKit
import CoreData


class ComposeNoteViewController: UIViewController {

    var noteComposeItemsArray = [ComposeNote]()
    var noteListArray = [NoteListItem]()
    // let noteListController = NoteListTableViewController()
 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    var selectedNoteList : NoteListItem? {
        didSet {
            loadComposeItem()

        }
    }

    @IBOutlet weak var noteTextView: UITextView!

    @IBOutlet weak var noteTextField: UITextField!    

    @IBAction func noteSavePressed(_ sender: UIBarButtonItem) {
        let newNoteTitleItem = NoteListItem(context: context)
        let newComposeNote = ComposeNote(context: context)
        newNoteTitleItem.title = noteTextField.text!
        newComposeNote.note  = noteTextView.text!
        newComposeNote.parentTitleNote = selectedNoteList

        noteComposeItemsArray.append(newComposeNote)
        noteListArray.append(newNoteTitleItem)
        saveComposeItems()


    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.


    }


    func saveComposeItems() {

        do {
            try context.save()
        }catch {
            print("Error saving context \(error)")
        }
    reloadInputViews()
    }

    func loadComposeItem() {
        let request : NSFetchRequest<ComposeNote> = ComposeNote.fetchRequest()
         let predicate = NSPredicate(format: "parentTitleNote.title MATCHES %@", selectedNoteList!.title!)
            request.predicate = predicate


       do {
           noteComposeItemsArray = try context.fetch(request)
        }catch {
            print("Can't load Items")
        }

         reloadInputViews()

      }
    }
...