除了@Duncan C的答案,您可以检查是否需要 super.viewDidLoad() 在顶部 viewDidLoad() 方法 MapViewController 类?不这样做可能会导致您的应用程序中出现奇怪的事情。
super.viewDidLoad()
viewDidLoad()
MapViewController
回答@ Paulw11的功劳
我终于设法通过这样的沟通来实现它:
步骤1)通过MKAnnotation和MKAnnotationView之间的协议进行1:1通信
步骤2)通过MKAnnotationView和MapViewController之间的协议进行1:1通信,传递相同的数据
终于像魅力一样,谢谢!
首先,一些命名约定问题:
名字 locationXIBController 是一个糟糕的选择 UIView 宾语。它是一个视图对象,而不是控制器对象。
locationXIBController
UIView
其次,Swift中的类名应该以大写字母开头。所以 LocationXIBView 对于该视图类来说,这将是一个更好的名称。
LocationXIBView
接下来,你的代码
let locationXIB = locationXIBController()
...是错的。这将创建一个您从未在视图层次结构中安装的locationXIBController类的全新实例。您应该将该行设为IBOutlet:
@IBOutlet weak var locationXIB: locationXIBController!
然后你应该控制 - 拖动 locationXIBController 在你的StoryBoard到视图控制器的插座。这将导致Interface Builder连接插座。
现在当你运行你的程序变量 locationXIB 将连接到 locationXIBController 从故事板/ XIB加载时查看。
locationXIB
我问:
那么detailViewWillShowUpDelegate实际上指向什么,或者它是否为零?
你回答说:
我只是尝试调试,它实际上是零
这就是问题......你需要设置 detailViewWillShowUpDelegate 指向有效的委托对象。这通常在.xib文件或故事板中完成,有时人们忘记建立连接,所以检查是否有意义。否则,在相关代码可以运行并设置之前,您需要在某个时刻获得对该委托的引用。
detailViewWillShowUpDelegate