передача CoreData из UITableViewCell в viewcontroller - PullRequest
1 голос
/ 30 мая 2019

Я пытаюсь создать функцию, при которой, когда пользователь щелкает конкретную ячейку в моем UITableView, проект переходит к новому ViewController и отображает всю информацию, которая была сохранена в CoreData. Проблема в том, что, когда я касаюсь ячейки, я получаю ошибку

Unexpected nil while unwrapping optional value

Вот мой код в том виде, в котором он находится сейчас в ViewController, который имеет TableView

class ContactViewController: UIViewController, UITableViewDataSource, NSFetchedResultsControllerDelegate, UITableViewDelegate {
        var selectName:String?
    var selectPhone:String?
var selectComment:String?

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        selectName = contact[indexPath.row].name
        selectPhone = contact[indexPath.row].phone
        selectComment = contact[indexPath.row].comments
        performSegue(withIdentifier: "MySegue", sender: self)
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "MySegue"{
            if let destVC = segue.destination as? IndiViewController {
                destVC.NameLabel = selectName
                destVC.PhoneLabel = selectPhone
                destVC.CommentLabel = selectComment
            }
        }
    }

Это мой код в IndiViewController (ВК, в котором я хочу, чтобы пользователь просмотрел контакт)

class IndiViewController: UIViewController {


    @IBOutlet var NameLabel: UILabel!
    @IBOutlet var PhoneLabel: UILabel!
    @IBOutlet var CommentsLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

    }
}

Я пробовал несколько других методов, но все они выдавали ту же ошибку

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

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "MySegue"{
            if let destVC = segue.destination as? IndiViewController {
                destVC.NameLabel = "selectName" //I thought if perhaps the nil was the var selectName this would at least let me know

            }
        }

Однако даже через это приложение вылетает и выдает ту же ошибку. Поэтому я думаю, что проблема связана с метками в IndiViewController.

Поэтому я попытался создать пустую строку и присвоить ее NameLabel следующим образом:

class IndiViewController: UIViewController {


    @IBOutlet var NameLabel: UILabel!

var name = ""

override func viewDidLoad() {
        super.viewDidLoad()
NameLabel.text = name
    }
}

но все равно не повезло.

Что я делаю не так?

1 Ответ

0 голосов
/ 30 мая 2019

Тем не менее, это может быть ошибка IBOutlet, даже для опечатки.

  1. удалить @IBOutlet var NameLabel: UILabel!
  2. удалить ссылку на вкладке "ссылки на розетки" в StoryBoard
  3. щелкните и перетащите новый выход для UILabel, а не называйте его с большой буквы

    // @IBOutlet var NameLabel: UILabel!<br> @IBOutlet var nameLabel: UILabel!

Редактировать

Также попробуйте передать ваши данные в два раза:

  1. создайте новую переменную в вашем destinationViewController, например:

    class IndiViewController: UIViewController {
    
        @IBOutlet var nameLabel: UILabel!
    
        var myText: String = ""
    
        override func viewDidLoad() {
            super.viewDidLoad()
            nameLabel.text = myText // assign the var to the labels text
        }
    

    }

  2. В вашем методе prepareForSegue присвойте myText, а не nameLabel.text

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "MySegue"{
            if let destVC = segue.destination as? IndiViewController {
                destVC.myText = "selectName" 
            }
        }
    }
    

Я предполагаю, что вы не можете получить доступ к IBOutlets методом prepare(for segue:). Целевой ViewController еще не построен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...