这可以适应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 – 如何测试方法的协议?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)