我正在使用RouteSelectController从中导航到RouteInfoController。
-(void)GoToRouteInfo
{
RouteInfoController *controller = [[RouteInfoController alloc] initWithNibName:@"RouteInfoController" bundle:nil];
controller.delegate = self;
[self.navigationController pushViewController:controller animated:YES];
[controller release];
}
在RouteInfoController.h中我正在创建自定义协议,如
#import <UIKit/UIKit.h>
@protocol RouteInfoDelegate;
@interface RouteInfoController : UIViewController<UITableViewDelegate, UITableViewDataSource, WptInfoDelegate>
{
id<RouteInfoDelegate> delegate;
}
@property (nonatomic, assign) id delegate
@end
@protocol RouteInfoDelegate
- (void) deleteWptFromRouteAndAppWithUID;
@end
在RouteInfoController.m中,我将此委托方法称为:
#import "MapViewController.h"
@class MapViewController;
@implementation RouteInfoController
@synthesize delegate;
-(void)callRouteDelegateMethod
{
[self.delegate deleteWptFromRouteAndAppWithUID];
}
此方法的定义在MapViewController.m中,如:
#import "RouteInfoController.h"
@interface MapViewController () <UIScrollViewDelegate,RouteInfoDelegate>
{
//.....................................
}
-(void) deleteWptFromRouteAndAppWithUID // The problem here is this delegate method is not called
{
NSLog(@"\n Inside delete Way point...");
}
编辑:当控件到达
中的委托方法时在RouteInfoController中的- (无效)callRouteDelegateMethod
我在我的控制台中收到崩溃消息,如:
[RouteSelectController deleteWptFromRouteAndAppWithUID]:无法识别 选择器发送到实例0x6eb4eb0
EDIT2:
在RootInfoController中我有一个方法,在表视图的任何单元格的didselect上调用这个方法
- (void) viewWptInfoControllerAtIndex: (int)index{
WptInfoViewController *controller = [[WptInfoViewController alloc] initWithNibName:@"WptInfoViewController" bundle:nil];
controller.asRootController = NO;
controller.delegate = self;
NSMutableDictionary *dict = [route.routeWaypoints objectAtIndex:index];
NPLibWaypoint *libWpt = [NPLibWaypoint initWithDictionary:dict AndDelegateDS:delegateDS];
controller.libWpt = libWpt;
[libWpt release];
controller.isFromRouteInfo = YES;
[self.navigationController pushViewController:controller animated:YES];
[controller release];
}
盖伊的cpls有人建议我如何解决这个问题以及我做错了什么。
任何人的帮助都得到了极大的赞赏。
全部谢谢, Monish。
答案 0 :(得分:1)
你得到的错误非常简单。这意味着您将消息-deleteWptFromRouteAndAppWithUID
发送到RouteSelectController
的实例,并且该类没有该方法。有些事情需要考虑:
拼写:如果您认为已在该类中定义了该方法,请仔细检查方法名称的拼写,以确保您调用的方法完全匹配您已实现的方法的名称。这是一个很长的名字,很容易出错。请记住,大写与结肠(或缺少结肠)一样重要。
receiver:检查接收邮件的对象是否确实是您想要的对象。当你有一个错误的指针时,这个消息有时会出现,导致一个错误的身份。
看起来这是你问题的第二点 - 你已经在MapViewController中实现了该方法,但错误消息表明该消息正被发送到另一个类的实例(RouteSelectController) )。您可能正在代码中的某处显式更改RouteInfoController的委托,因此请查找。但可能是您的RouteInfoController的委托对象由于某种原因被解除分配,并且随后在同一地址处创建了RouteSelectController。当发生这种情况时,delegate
指向正确的位置,但现在存在错误的对象,并且会出现错误。