我的应用程序有一个显示项目简要数据的UITableView,当用户按下一个单元格时,我会尝试将用户发送到另一个viewController。该viewController名为detailViewController,我希望它能显示有关所选单元格的更多详细信息。我使用的是核心数据,我的问题就出在这里。我不知道如何将一个存储在cordite中的特定对象传递给另一个视图控制器。下面是我的代码:
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
}
}我不确定如何将存储在核心数据中的对象传递给另一个视图控制器,我尝试了很多方法,但似乎都不起作用。谢谢你们!
发布于 2015-01-14 23:50:12
在尝试了一些东西之后,我解决了我的问题,下面的代码对我来说是有效的。在我的DetailViewController中,我将标签更改为文本字段以显示信息。我创建了一个string类型的变量detailName,并将我的数据放在there.Thanks中,以帮助你们!
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
}发布于 2015-01-14 02:02:00
在传递任何数据之前,请检查以确保您的detailVC已被分配和初始化。我猜这就是问题所在。
https://stackoverflow.com/questions/27927779
复制相似问题