使用protocol-iphone从不同类调用函数时出现问题

时间:2010-03-19 11:36:33

标签: iphone

我在我的游戏中使用cocos2d。我在其中播放电影并具有用于控件的单独叠加视图。在叠加视图中检测触摸。现在,当检测到触摸时,必须调用游戏代码中的功能。但是没有检测到该功能,也没有错误。我不知道出了什么问题。有人请帮帮我。 代码如下

协议部分是

@protocol Protocol
@required
- (void)transition1:(id)sender;
@end

游戏代码中要调用的函数是

- (void)transition1:(id)sender
{
    [[Director sharedDirector] replaceScene: [ [Scene node] addChild: [Layer4 node] z:0] ];
}

MovieOverlayViewController.h中叠加视图中的代码

#import "Protocol.h"

@interface MovieOverlayViewController : UIViewController
{
    UIImageView *overlay;
    NSObject <Protocol> *transfer;
}
@end

MovieOverlayViewController.m

中叠加视图中的代码
@implementation MovieOverlayViewController

- (id)init
{
    if ((self = [super init]))
        self.view = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
    return self;
}

-(void) viewWillAppear:(BOOL)animated
{
    overlay = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"overlay.png"]] autorelease];

    [self.view addSubview:overlay]; 
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{     
    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView:self.view]; 
    NSLog(@"pointx: %f pointy:%f", point.x, point.y);

    if (CGRectContainsPoint(CGRectMake(1, 440, 106, 40), point))
    {
        // the function is called here
        [transfer transition1: nil];
    }
    else if (CGRectContainsPoint(CGRectMake(107, 440, 106, 40), point))
        NSLog(@"tab 2 touched");
}

- (void)dealloc
{
    [overlay release];
    [super dealloc];
}

@end

2 个答案:

答案 0 :(得分:0)

最好使用调试器来处理这类问题:在touchesBegan:withEvent:中设置断点并查看是否调用该方法。然后单步看看会发生什么。在调试器中,您还可以检查transfer的值是否为nil,这可能是问题所在。

哦,既然这是你的第二个问题,请在SO中查看how code should be formatted。加价并不困难。

答案 1 :(得分:0)

您没有初始化transfer

当未初始化ivar时,其值为0(零)。将消息发送到nil是一个无操作,因此没有错误,也没有任何反应。