方法委托不会被调用
问题描述:
我试图实现这个:方法委托不会被调用
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");
。请帮助
我做了调试,并在该行设置断点:
if ([self.delegate respondsToSelector:@selector(drawingSuccessful:)])
和我注意到,这不是一个有效的条件......它从未进入支架......所以这 它不是编译[self.delegate drawingSuccessful:YES];
。 那么,什么是错的?
答
是否航线覆盖地图视图已经出现在你的笔尖?在你看来didLoad要创建它的一个新的实例,设置它的委托,然后什么都没有。您通常会将其添加到您的子视图中,除非,正如我所说,它已经存在于您的nib文件中。
如果有,请在UICRouteOverlayMapView中设置插座,并在界面构建器中或在viewDidLoad中连接委托,将委托设置为用于表示实际地图视图的任何实例变量。
这可能只是删除这条线的问题:
routeOverlayMapView = [[UICRouteOverlayMapView alloc] init];
如果routeOverlayMapView已经在你的真实看法指点。
你可能不进入,去年if语句,因为你的delegate
为零。声明本身无论如何都是多余的,因为该方法在协议中是必需的。
答
发生这种情况可能是因为当您分配UICRouteOverlayMapView
时,将调用-drawRect:
方法。但代表在该行之后。因此,代表从不接收消息。 总体而言,代表应该是零在那个时候。检查代表是否为零。
答
乔治
更换这种方法,我相信你会得到解决。
- (void)drawRect:(CGRect)rect
{
NSLog(@"mesagge");
if ([self.delegate respondsToSelector:@selector(drawingSuccessful:)]) {
[delegate drawingSuccessful:YES];
}
}
你是真的......我已经指向那个。我删除了这一行,并用下面的代码替换它:routeOverlayView.delegate = self;但仍然没有进入if语句! – adrian
我不知道你需要的if语句(见我的更新),但什么是代表的价值,现在,当你在'drawRect'? – jrturton
你是对的! – adrian