全局变量与直接连接在视图控制器ios之间传递数据

时间:2014-11-22 04:17:16

标签: ios uitableview swift

我不认为标题使用了正确的术语,所以我现在试着澄清。

我有两个视图控制器,我想在它们之间传递数据。视图1有一个tableView,第二个视图有一个MKMapView。现在在我想要的相应控制器中,当您单击视图1中的单元格时,它会将您发送到单元格指示的地图上的位置。纽约的一个小组将发送到纽约的地图。所以我尝试在didSelectRowAtIndexPath中创建了第二个控制器的实例,它将数据传输给它。但是当我这样做时,它总是会在第二个视图控制器中返回一个nil值。

所以我创建了第3个swift文件,它有一些全局变量,当我通过它们传输数据时,它运行得很好。为什么会这样?

干杯。

编辑:在我通过第三个文件之前

ViewController 1的代码

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    var selectedCell = array[indexPath.row]

    var viewController2 = ViewController2()

    viewController2.textLabel1 = selectedCell.name
    coord.textLabel2 = selectedCell.coordinate
}

ViewController 2的代码

@IBOutlet weak var textLabel1: UILabel!
@IBOutlet weak var textLabel2: UILabel!

View Controller 2的代码通过第三个文件

@IBOutlet weak var textLabel1: UILabel!
@IBOutlet weak var textLabel2: UILabel!
override func viewDidLoad() {
textLabel1.text = globalVar1
textLabel2.text = globalVar2

}

第3档的代码

var globalVar1: String!
var globalVar2: String!

所以从下面的评论中我认为textbabels尚未初始化的第一种方式,所以我分配给它们的值变为nil值。它是否正确?如果是这样,你会如何正确地做第一种方式

2 个答案:

答案 0 :(得分:1)

如果我不得不猜测,我会因为我无法评论更多信息(我遇到麻烦)。

这是因为您正在尝试将其分配到插座。 插座尚未设置,这意味着设置时(我认为ViewDidLoad) 插座将设为零。 但是,如果对象没有离开堆,则应保留属性。

答案 1 :(得分:-1)

PSedu代码:

第一个观点: 你的表格视图

第二视图: 您的地图视图

如何工作

在你的第二个观点中: 在.h文件中添加NSMutableArray * valueArraytoGet,设置其属性 @。在.m文件中同步它

现在在didSelectRowAtIndex方法的第一个视图中

创建Second View Controller的对象 并将数据分配为 SecondViewController * object = ...... object.valueArraytoGet = [在这里指定你的数值数组] ....

希望它会有所帮助