自定义协议的方法是不是在iPhone调用sdk
我有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。
你得到的错误是非常简单的。这意味着您要将消息-deleteWptFromRouteAndAppWithUID
发送到RouteSelectController
的实例,并且该类没有该方法。有些事情要考虑:
拼写:如果你认为你已经定义在类中的方法,仔细检查方法名称的拼写,以确保你调用的方法完全一致您实施的方法的名称。这是一个很长的名字,很容易出错。请记住,大写字母和冒号(或冒号)不一样。
receiver:检查接收消息的对象是否真的是您想要的对象。这个消息有时候会在你指针错误时突然出现,导致一个错误的身份。
看起来它是在你的情况下,问题的第二点 - 你有在的MapViewController该方法的实现,但该错误消息指出该消息被发送到的一个实例不同的类(RouteSelectController)。您可能会在代码中显式更改RouteInfoController的委托,因此请仔细查看。但可能出现这种情况,您的RouteInfoController的委托对象由于某种原因被解除分配,并且随后在同一地址创建了RouteSelectController。当发生这种情况时,delegate
指向正确的位置,但错误的对象现在在那里,并且出现错误。
“RouteSelectController”来自哪里?我以为你想使用MapViewController作为你的委托..也许你设置委托错了? – 2012-03-10 09:28:46
Thats wt我很困惑y RouteSelectorController进来之间。我做了同样的事,因为我发布了这个问题的代码。 – 2012-03-10 09:41:46
请向我们展示您设置委托对象的代码 – 2012-03-10 10:20:46