Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift-从其他类访问mapView时遇到问题_Ios_Swift_Mkmapview_Viewcontroller - Fatal编程技术网

Ios Swift-从其他类访问mapView时遇到问题

Ios Swift-从其他类访问mapView时遇到问题,ios,swift,mkmapview,viewcontroller,Ios,Swift,Mkmapview,Viewcontroller,我想通过tableView中属于单元格的按钮在地图上设置位置。问题是,如何获取我的ViewController的当前即时信息,而不是创建一个新的即时信息?my CustomCell中的方法如下所示: @IBAction func mapButton(sender: AnyObject) { ViewController().showPinOnMap(Location) } } 我最终得到的mapView等于零,我想是因为我安装了新的ViewConcoller,而不是访

我想通过tableView中属于单元格的按钮在地图上设置位置。问题是,如何获取我的ViewController的当前即时信息,而不是创建一个新的即时信息?my CustomCell中的方法如下所示:

@IBAction func mapButton(sender: AnyObject) {
        ViewController().showPinOnMap(Location)
    }
} 
我最终得到的mapView等于零,我想是因为我安装了新的ViewConcoller,而不是访问已经存在的ViewConcoller。 我读过关于类型方法的书,但我不知道如何处理它们。在我的ViewController中,我尝试了:

class func showPinOnMap(location: CLLocationCoordinate2D?){
    if(location != nil){
        map.setCenterCoordinate(location!, animated: true)
    }
}
但它会导致以下错误

我想整个过程都是关于访问ViewController实例,而不是创建一个全新的实例(如果我错了,请纠正我)


我非常感谢您的帮助,请提前感谢

您调用的不是您的
ViewController
的实际实例,而是类本身
map
不过是
ViewController
实例的成员。要解决此问题,必须在相应实例上调用
map

例如,这可以通过回调来完成。例如,在
CustomCell
中定义一个变量:

var onMapButtonCallback : ((CLLocationCoordinate2D) -> Void)?
然后可以从
mapButton
执行:

@IBAction func mapButton(sender: AnyObject) {
    onMapButtonCallback?(Location)
} 
剩下要做的事情是连接
ViewController
中的回调,我假设它也实例化了
CustomCell

customCell.onMapButtonCallback = { location in self.showPinOnMap(location) }

这是因为您在
class
method中使用了
map
实例变量。如何修复它?删除“类”并停止usyng类型方法并寻找不同的方法?答案取决于应用程序架构,但如果您只想使用ViewController的一个实例,请尝试在每次按下mapButton时实现单音或创建实例,但每次按下按钮时创建实例(ViewController().showPinnmap(位置))导致我出现运行时错误,因为在这种情况下map等于nil是的,在类方法中,您应该创建属性,将位置设置为该属性,并读取viewDidLoadWow上的值,真是不可思议!它工作得很好,但我想我需要一段时间才能完全理解这个解决方案!谢谢我不会称之为黑客。这是一种常见的模式。对于像这样的iOS新手来说,它看起来像hack:)你是说这是一种从其他类调用函数的常见模式?或者通常情况下?这是一种使分离类之间的通信发生的模式。另一个是委派。或者你也可以使用
NSNotification
。谢谢塞巴斯蒂安,这对我帮助很大!