方法委托不会被调用

我试图实现这一点:

UICRouteOverlayMapView

.h file @protocol DrawingDataDelegate <NSObject> @required -(void) drawingSuccessful:(BOOL)done; @end @interface UICRouteOverlayMapView : UIView { id <DrawingDataDelegate> delegate; } - (id)initWithMapView:(MKMapView *)mapView; @property (nonatomic, retain) id <DrawingDataDelegate> delegate; @end .m file @implementation UICRouteOverlayMapView @synthesize delegate; - (void)drawRect:(CGRect)rect { NSLog(@"mesagge"); if ([self.delegate respondsToSelector:@selector(drawingSuccessful:)]) { [self.delegate drawingSuccessful:YES]; } } 

采用协议的类:

 .h file #import "UICRouteOverlayMapView.h" @class UICRouteOverlayMapView; @interface ItineraireViewController : UIViewController <MKMapViewDelegate, UICGDirectionsDelegate, CLLocationManagerDelegate, DrawingDataDelegate> { UICRouteOverlayMapView *routeOverlayMapView; } .m file - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. routeOverlayMapView = [[UICRouteOverlayMapView alloc] init]; routeOverlayMapView.delegate = self; } -(void) drawingSuccessful:(BOOL)done{ NSLog(@"it's done"); } 

现在,我做错了什么导致方法drawingSuccessful永远不会被调用?

我知道肯定的方法

 - (void)drawRect:(CGRect)rect { NSLog(@"mesagge"); if ([self.delegate respondsToSelector:@selector(drawingSuccessful:)]) { [self.delegate drawingSuccessful:YES]; } } 

被调用,因为这得到显示NSLog(@"mesagge"); 。请帮忙

我在这一行进行了debugging和设置断点:

  if ([self.delegate respondsToSelector:@selector(drawingSuccessful:)]) 

我注意到,这不是一个有效的条件…它从来没有进入括号…所以这是不编译[self.delegate drawingSuccessful:YES]; 。 那么,什么是错的?

路线覆盖地图视图是否已经出现在您的笔尖? 在你看来didLoad你正在创build一个新的实例,设置它的委托,然后…什么都没有。 您通常会将其添加到您的子视图,除非,正如我所说,它已经存在于您的笔尖文件。

如果是这样,请在UICRouteOverlayMapView中设置一个sockets,并在界面构build器中或在viewDidLoad中连接委托,将代理设置为用于表示实际地图视图的任何实例variables。

这可能只是删除这一行的一个问题:

  routeOverlayMapView = [[UICRouteOverlayMapView alloc] init]; 

如果routeOverlayMapView已经指向你的真实视图。

你可能没有进入最后的陈述,因为你的delegate是零。 声明本身无论如何都是多余的,因为这个方法在你的协议中是必须的。

这可能是因为当你分配UICRouteOverlayMapView ,调用了-drawRect:方法。 但是这个代表是在那一行之后设置的。 因此,代表从不接收消息。 总的来说,当时代表应该是零。 检查代表是否为零。

乔治

replace这个方法,我相信你会得到解决scheme。

 - (void)drawRect:(CGRect)rect { NSLog(@"mesagge"); if ([self.delegate respondsToSelector:@selector(drawingSuccessful:)]) { [delegate drawingSuccessful:YES]; } }