iphone – 如何测试方法的协议?

iphone – 如何测试方法的协议?,第1张

概述在iOS 4之前,我曾经为每个添加到地图视图的MKAnnotationView添加一个观察者,监听它的选择方法,所以我知道用户什么时候点击了一个引脚. 这可以适应iOS 4.2.我注意到发布的注释注释实际上被重复使用,它以某种方式与观察者混淆. 所以我想我可以使用-mapview:didSelectAnnotationView:方法从MKMapViewDelegate为我的需要,但这只是添加到iO 在iOS 4之前,我曾经为每个添加到地图视图的MKAnnotationVIEw添加一个观察者,监听它的选择方法,所以我知道用户什么时候点击了一个引脚.

这可以适应iOS 4.2.我注意到发布的注释注释实际上被重复使用,它以某种方式与观察者混淆.

所以我想我可以使用-mapvIEw:dIDSelectAnnotationVIEw:方法从MKMapVIEwDelegate为我的需要,但这只是添加到iOS 4.0 SDK.

所以,为了保持兼容性,我想在我的委托上实现这个方法,并有条件地检查MKMapVIEwDelegate协议上存在的这种方法,所以如果不存在,我将添加我的观察者到注释视图.

我如何做一个协议方法,类似于我们如何检查一个类是否不是零?

更新:

正如DanIEl Dickison指出的那样,我不能使用respondToSelector :,因为我的委托具有-mapvIEw:dIDSelectAnnotationVIEw:实现了4.0设备.我需要的是检查该设备上的协议是否具有可选的-mapvIEw:dIDSelectAnnotationVIEw:method或如果MKMapVIEw将在其委托上查找该方法.

我结束了对当前iOS版本运行的测试.如果高于4.0,MKMapVIEw会寻找该方法并调用它.

if ([[[UIDevice currentDevice] systemVersion] doubleValue] < 4.0)    [self setupObserver];

这解决了原来的问题,但是以某种方式检查方法的实际协议仍然是有趣的.

解决方法 这是一个棘手的事情.所以如果我正确地理解你的问题,你想在运行时找出地图视图是否将mapVIEw:dIDSelectAnnotationVIEw:消息发送给它的委托.但是您不能使用conformstoprotocol:或respondToSelector:因为您明确地执行委托,您正在采用协议并实现该方法.

我唯一可以想到的是检查在iOS 4中添加到MKMapVIEw(而不是代理)的其他方法,如:mapRectThatFits :.

另一种可能性是使用Objective-C runtime library查询Protocol对象.但这可能是过度的,我也不认为它将会起作用,因为Protocol object is created by the compiler当你构建你的应用程序,这可能会得到UIKit SDK定义的MKMapVIEwDelegate协议对象,而不是任何运行时编译.

总结

以上是内存溢出为你收集整理的iphone – 如何测试方法的协议?全部内容,希望文章能够帮你解决iphone – 如何测试方法的协议?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1028056.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存