我试图实现这个:
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];
。
那么,出了什么问题?
答案 0 :(得分:3)
发生这种情况可能是因为当您分配UICRouteOverlayMapView
时,会调用-drawRect:
方法。但代表是在该行之后设置的。因此,代表永远不会收到消息。
总的来说,代表当时应该是零。检查代表是否为零。
答案 1 :(得分:1)
路线覆盖地图视图是否已经出现在您的笔尖中?在你的视图didLoad中,你正在创建它的一个新实例,设置它的委托,然后......没有。您通常会将其添加到子视图中,除非,正如我所说,它已经存在于您的nib文件中。
如果是,请在UICRouteOverlayMapView中设置出口并在界面构建器中连接委托,或者在viewDidLoad中,在您用于表示实际地图视图的任何实例变量上设置委托。
这可能只是删除这一行:
routeOverlayMapView = [[UICRouteOverlayMapView alloc] init];
如果routeOverlayMapView已经指向您的真实视图。
您可能没有输入最后一句if语句,因为您的delegate
为零。无论如何,语句本身是多余的,因为协议中需要该方法。
答案 2 :(得分:1)
乔治
替换此方法,我相信你会得到解决方案。
- (void)drawRect:(CGRect)rect
{
NSLog(@"mesagge");
if ([self.delegate respondsToSelector:@selector(drawingSuccessful:)]) {
[delegate drawingSuccessful:YES];
}
}