ios - 在委托(delegate)内部访问时 IBOutlet 值为零

标签 ios swift mkmapview option-type iboutlet

我有一个 UIViewController,其中包含 Storyboard 中的 MKMapView。然后我做了一个 map View 的导出。从这个屏幕我转到另一个屏幕,在包含 map 的第一个 View Controller 中回调委托(delegate)。当在这个委托(delegate)方法中,我尝试获取 map View 时,就会出现问题,它总是给我零。从而产生“在展开可选值时意外发现 nil”)错误。

这是我的代码:

1)MapViewController中的IBOutlet连接

@IBOutlet weak var map: MKMapView!

2)MapViewController中的委托(delegate)方法:

func didSelectSearchContact(selectedContact: Contacts) -> Void{

let coordinate: CLLocationCoordinate2D  = CLLocationCoordinate2DMake(selectedContact.lat, selectedContact.lng)
let span = MKCoordinateSpanMake(2.0, 2.0)
    let region: MKCoordinateRegion      = MKCoordinateRegion(center: coordinate, span: span)
print("self.map====== \(self.map)")

 map.region = map.regionThatFits(region)//here comes the crash.
}

3) 这是从另一个 View Controller 调用上述委托(delegate)的方式:

let contact = searchResults[indexPath.row] as! Contacts

    self.delegate = MapViewController()
    self.delegate?.didSelectSearchContact(contact)

让我知道我在这里做错了什么!谢谢!

最佳答案

所以基本上你持有对mapView的弱引用。 当您将 ViewController 留给新的 viewController 时,viewController 将被释放。因此,它丢失了指向mapKit的指针并将其保留在内存中。 我不建议您将其更改为强指针,而是保存将来需要的必要原语或结构。 即,当您操作 segue 时,请保存 selectedContact.lat、selectedContact.lng 或您需要的任何内容。

我认为您应该在新的 ViewController 中为连接到适当 View 的 MAPKit 提供一个单独的 IBOutlet。 在初始化程序中,只需设置 mapView 的参数以关注所需的数据

关于ios - 在委托(delegate)内部访问时 IBOutlet 值为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33629466/

相关文章:

ios - NSURLRequest 在 iphone 5s 和更新版本上给出正确结果但在 iphone 4s 和 5 上失败

ios - 在 iOS 上获取当前位置

ios - MKMapView addAnnotations 崩溃

iPhone MKMapView注释聚类

ios - 当专辑信息可用时,按专辑对歌曲数组进行排序

ios - 从 Firebase 控制台发送静默推送通知

ios - 比较 NSArray1 和 NSArray2 的对象

swift - 工具栏正在删除我在NavigationView中的后退按钮

ios - 如何在 swift ios 中对齐表格 View 单元格中的文本

ios - Swift - 为什么 UIScreen.main.bounds 在不同的设备上表现不同?