在没有Segue的情况下快速传递数据

时间:2018-08-16 11:10:56

标签: ios swift core-data segue

我目前正在使用Swift 4制作一个待办事项应用程序。主视图控制器具有一个包含某些类别的表视图,当选择一个时,它将用户带到一个视图控制器,该类别中的项位于列出。但是我有一个错误,因为列表中仅显示最新的项目。

我认为这是由于我导航到列表视图控制器的方式所致。我目前正在这样做:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let destinationVC = ListVC()
    if let indexPath = tableView.indexPathForSelectedRow {
        destinationVC.selectedCategory = categoryArray[indexPath.row]
    }
    navigationController?.pushViewController(destinationVC, animated: true)

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

在列表视图控制器中,我只是用它来加载数据:

var selectedCategory : Category? {
    didSet {
        loadItems()
    }
}

我首先使用情节提要创建了此应用,当使用segues时,它运行良好。

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

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let destinationVC = segue.destination as! TodoListVC

    if let indexPath = tableView.indexPathForSelectedRow {
        destinationVC.selectedCategory = categoryArray[indexPath.row]
    }
}

所以基本上,问题是在辅助列表视图控制器中,它将仅显示最近添加的项目,即使存储在核心数据中也不会显示其他项目。我认为这与每次创建新对象时显示辅助视图控制器的方式有关。

如果有人对如何正确进入下一个视图控制器有任何建议,将不胜感激。

谢谢

3 个答案:

答案 0 :(得分:0)

我认为通过这段代码,我已经感觉到您正在以错误的方式将数据传递给另一个视图控制器:

let destinationVC = ListVC()
if let indexPath = tableView.indexPathForSelectedRow {
    destinationVC.selectedCategory = categoryArray[indexPath.row]
}

...

我的建议是,您不必通过这种方式传递数据,而必须使用一个数组传递一个包含选定类别中项目的数组,然后通过“准备检定”传递该数组。

然后从接收视图控制器的viewdidappear或viewdidload方法中,使用源VC传递的数组,并将其用作该第二个VC中的表视图的数据源。

我希望这是有道理的。 :-)

答案 1 :(得分:0)

删除segue并添加情节提要ID

enter image description here

print_r($deData['data']);

//Output

Array
(
    [id] => 3
    [start_date] => 2018-05-17 08:40
    [end_date] => 2018-05-17 09:00
)

答案 2 :(得分:0)

尝试此操作将为您提供帮助:-

  

您可以使用情节提要从一个视图控制器向另一个视图控制器发送数据   实例。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

   let next = self.storyboard?.instantiateViewController(withIdentifier: "NextControllerStoryBoard_id")as! NextController

next.selectedCategory = categoryArray[indexPath.row]

self.navigationController?.pushViewController(next, animated: true) }

此处NextController是您要去的控制器类名称。selectedCategory是您在NextController上声明的数组名称

您可以发送任何东西数组字典,图像,Int值等。

NextControllerStoryBoard_id是您在该控制器的情节提要中声明的ID

In storybard id add your storybard id

enter image description here 希望对您有帮助