swift - 尝试从核心数据对象设置 UITextField 文本时在 prepareForSegue 中查找 nil

标签 swift uitableview core-data nsfetchedresultscontroller

我有一个 UITableView,它使用 NSFetchedResultsController 来获取 UITableView 的数据。当用户在 UITableView 中选择一行时,我有一个带有两个 UITextField 的编辑模态视图向上滑动,供用户编辑 UITableViewCell 中的数据。我想要完成的是使用来自核心数据的 UITableViewCell 中的文本设置每个 UITextField 的文本。我这样做是为了让用户不必为了进行编辑而重新输入数据。

问题是,当我尝试在 prepareForSegue 中为每个 UITextField 设置文本时,出现 fatal error “在展开可选值时意外发现 nil”。我知道数据在那里,所以我不确定为什么它找不到零。我关注了this在使用 NSFetchedResultsController 时正确编写我的 prepareForSegue 函数的 stackoverflow 帖子。这是我的代码:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
       if segue.identifier == "edit" {
        if let inputController = segue.destinationViewController as? QAInputViewController {
            let uri = currentDeck!.objectID.URIRepresentation()
            let objectID = managedContext.persistentStoreCoordinator?.managedObjectIDForURIRepresentation(uri)
            inputController.currentDeck = managedContext.objectWithID(objectID!) as? Deck
            if let indexPath = tableView.indexPathForCell(sender as! DisplayTableViewCell) {
                let data = fetchedResultsController.objectAtIndexPath(indexPath) as? Card
                inputController.questionInput.text = data?.question
                inputController.answerInput.text = data?.answer
            }

        }

    }

}

感谢您的帮助。

最佳答案

我发现发生崩溃是因为在尝试为每个 UITextField 分配文本时我的目标 View Controller 的 View 尚未加载。

所以我在目标 View Controller 中添加了两个 String 类型的变量来保存来自 prepareForSegue 函数的数据,而不是尝试将所选 UITableView 行中的文本直接分配给 UITextField,然后在 viewWillAppear 中我将这些变量分配给每个变量UI 文本字段。

  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
      if segue.identifier == "edit" {
        if let inputController = segue.destinationViewController as? QAInputViewController {
            let uri = currentDeck!.objectID.URIRepresentation()
            let objectID = managedContext.persistentStoreCoordinator?.managedObjectIDForURIRepresentation(uri)
            inputController.currentDeck = managedContext.objectWithID(objectID!) as? Deck
        if let indexPath = tableView.indexPathForCell(sender as! DisplayTableViewCell) {
            let data = fetchedResultsController.objectAtIndexPath(indexPath) as? Card
                inputController.selectedQuestion = data!.question
                inputController.selectedAnswer = data!.answer
         }
      }
   }
}

在我的目标 View Controller 中:

var selectedQuestion: String = ""
var selectedAnswer: String = ""

override func viewWillAppear(animated: Bool) {

    questionInput.text = selectedQuestion
    answerInput.text = selectedAnswer
}

关于swift - 尝试从核心数据对象设置 UITextField 文本时在 prepareForSegue 中查找 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35822278/

相关文章:

ios - swift 3 : How to convert struct to Parameters

ios - 点击 UITextField 后跟 UIDatePicker 时,UITableView 向上滚动两次

ios - WatchKit 和 iOS App 的核心数据

swift - 快速获取具有一对多关系的 coredata

ios - 使用字符串标记以编程方式访问 View Controller 内的 View

iOS Swift,约束将 View 推离 Storyboard

ios - 日历天条件

iphone - 从多个表中过滤数据

ios - 无法获取 Parse.com PFUser 数据?

ios - 是否可以延迟加载符合 nscoding 协议(protocol)的对象