在Swift中的视图控制器之间传递自定义的类数据

我有两个视图控制器,其中包含一个tableview和另一个包含页面显示下面的select一个特定的行。

在我的viewController的开始,我有我的类variables实例化

var myTableViewItem = Item() 

我已经从数据数组中select了行信息:

 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { myTableViewItem = pList[indexPath.row] println("\(itemViewItem.getItemName())") performSegueWithIdentifier("itemSelect", sender: myTableViewItem) } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "itemSelect" { let nController = segue.destinationViewController as UINavigationController let newController = nController.viewControllers[0] as ItemDetailViewController println("\(myTableViewItem.getItemValue())") //Statement correctly prints item parameter. newController.itsItem = myTableViewItem as Item } } 

并在目标视图控制器(newController)中有一个可选的类引用参数

 var thisItem: Item! 

然而,无论何时我试图访问后续的视图控制器中的任何类数据,它只能拥有默认的初始值。 而不是从发送对象传递的

发送对象肯定是完全填充了非默认值(通过控制台打印语句validation)。 我不知道为什么这种情况发生时,我试图分配数据。

我在网上search,看了两天的其他职位,无济于事!

根据以下评论更改答案

如果我理解正确,

使该属性为可选

 var thisItem: Item? 

然后在viewDidLoad方法中检查是否设置为缺省值,如果以前设置的话,它可能会有一个值:

 func viewDidLoad() { if thisItem! == nil{ thisItem = theDefaultValue } 

….

老答案:如果你不能找出值被改变的地方,我会添加一个带有断点的setter / getter

 var _thisItem: Item? var thisItem: Item? { get { return _thisItem; } set { _thisItem = newValue; println("value was changed to \(newValue)");//add a breakpoint here and check trace. } } 

感谢您的input。 我已经将问题缩小到了课程初始化问题。

我修改了代码在第二个视图控制器中包含一个可选variables:

 var: tester:string! 

并在第一个VC中增加了一行:

 var test = itemViewItem.itemName newController.tester = test 

当第二个视图控制器加载我能够从viewDidLoad()打印出控制台的名字。 因此问题是当我的自定义类在新的VC分配一个值。 由于某种原因,它不能够获得给定的价值。

奇怪的是,如果我包括在第一个控制器中的第二个控制器中的同一个对象初始化程序:

 var itemTest: Item! itemTest = itemViewItem println(itemTest.itemName) println(itemViewItem.itemName) 

两者是等价的。 然而,第二个视图控制器中的值是第一次“无”。 然而,如果我按下后退button,然后返回到视图控制器第二/第三/第四次..它将工作如预期从任何行(项目)启动赛格。 引导我相信它与传递信息和实施等级有关。