2012-03-10 33 views
0

我有RouteSelectController我从中导航到RouteInfoController。自定义协议的方法是不是在iPhone调用sdk

-(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..."); 

} 

编辑:当控制达到该委托方法

- (无效)callRouteDelegateMethod

在RouteInfoController我在我的控制台得到一个崩溃的消息,如:

[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]; 

} 

盖伊的CPL的人建议我如何解决这一点,什么是错的我做了。

任何人的帮助深受赞赏。

谢谢大家, Monish。

+0

“RouteSelectController”来自哪里?我以为你想使用MapViewController作为你的委托..也许你设置委托错了? – 2012-03-10 09:28:46

+0

Thats wt我很困惑y RouteSelectorController进来之间。我做了同样的事,因为我发布了这个问题的代码。 – 2012-03-10 09:41:46

+0

请向我们展示您设置委托对象的代码 – 2012-03-10 10:20:46

回答

1

你得到的错误是非常简单的。这意味着您要将消息-deleteWptFromRouteAndAppWithUID发送到RouteSelectController的实例,并且该类没有该方法。有些事情要考虑:

  • 拼写:如果你认为你已经定义在类中的方法,仔细检查方法名称的拼写,以确保你调用的方法完全一致您实施的方法的名称。这是一个很长的名字,很容易出错。请记住,大写字母和冒号(或冒号)不一样。

  • receiver:检查接收消息的对象是否真的是您想要的对象。这个消息有时候会在你指针错误时突然出现,导致一个错误的身份。

看起来它是在你的情况下,问题的第二点 - 你有在的MapViewController该方法的实现,但该错误消息指出该消息被发送到的一个实例不同的类(RouteSelectController)。您可能会在代码中显式更改RouteInfoController的委托,因此请仔细查看。但可能出现这种情况,您的RouteInfoController的委托对象由于某种原因被解除分配,并且随后在同一地址创建了RouteSelectController。当发生这种情况时,delegate指向正确的位置,但错误的对象现在在那里,并且出现错误。