如何将核心数据信息从表视图传递到视图控制器?

Posted

技术标签:

【中文标题】如何将核心数据信息从表视图传递到视图控制器?【英文标题】:How can I pass core data information from a table view to a view controller? 【发布时间】:2015-01-13 17:16:48 【问题描述】:

我的应用程序有一个 UITableView 显示有关项目的简要数据,我试图在用户按下单元格时将其发送到另一个 viewController。该 viewController 名为 detailViewController,我希望它显示有关所选单元格的更多详细信息。我正在使用核心数据,我的问题就在这里。我不知道如何将存储在corrite中的一个特定对象传递给另一个视图控制器。这是我的代码:

var tasks: Array<AnyObject> = [] //Creating an array that will store fetched data

override func viewWillAppear(animated: Bool) 

let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let contexts: NSManagedObjectContext = appDel.managedObjectContext!
let fetchreq = NSFetchRequest(entityName: "toDo")

tasks = contexts.executeFetchRequest(fetchreq, error: nil)!
tableView.reloadData()



override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 


let CellID: NSString = "myCell"

var cell: CustomCell = tableView.dequeueReusableCellWithIdentifier(CellID) as CustomCell

if let indexpth = indexPath as NSIndexPath! 

    var data: NSManagedObject = tasks[indexpth.row] as NSManagedObject
    cell.theTextLabel?.text = data.valueForKeyPath("toDoName") as? String

    cell.theDetailTextLabel?.text = data.valueForKeyPath("toDoNumber") as? String



override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.

    if segue.identifier == "showDetail" 

        var detailVC: DetailViewController = segue.destinationViewController as DetailViewController

        var index: NSIndexPath = self.tableView.indexPathForSelectedRow()!
        var row: NSInteger = index.row

        var myData: NSManagedObject = tasks[row] as NSManagedObject

        var tName: AnyObject? = testData.valueForKeyPath("tName")
        detailVC.detailTasks = myData
        detailVC.detailName = tName

    


我不确定如何将存储在核心数据中的对象传递给另一个视图控制器,我已经尝试了很多方法,但它似乎不起作用。谢谢大家!

【问题讨论】:

您的prepareForSegue 看起来很合理。它以什么方式无法“工作”?它被称为?如果调试它,index 是否正确? ...是myData 您在prepareForSegue正在传递数据。您对代码有什么问题? 【参考方案1】:

我在尝试了几件事后解决了我的问题,下面的代码对我有用。在我的 DetailViewController 中,我将标签从标签更改为文本字段以显示信息。我创建了一个字符串类型的变量 detailName 并将我的数据放在那里。谢谢你们的帮助!

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 


    if segue.identifier == "showDetail" 

        var detailVC: DetailViewController = segue.destinationViewController as DetailViewController

        var selectedItem: NSManagedObject = tasks[self.tableView.indexPathForSelectedRow()!.row] as NSManagedObject

        detailVC.detailName = selectedItem.valueForKey("tName") as String

    

【讨论】:

【参考方案2】:

在传递任何数据之前,请检查以确保您的 detailVC 已分配并初始化。我猜这就是问题所在。

【讨论】:

他们肯定有。问题不在于 VC,而在于传递数据

以上是关于如何将核心数据信息从表视图传递到视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从表视图传递到另一个视图控制器

如何将不同的数据从表视图传递到另一个视图控制器

如何以编程方式将数据从表视图控制器传递到另一个控制器? [复制]

将标签数据从表视图传递到另一个视图控制器

如何将标签中的数据从表视图行操作发送到视图控制器?

从表视图到另一个表视图之间传递数据(多)[重复]