iPhone:协议在模拟器中工作,但不在设备上 - 我不知道任何进一步

时间:2010-08-02 14:06:27

标签: iphone xcode protocols simulator

我想为我的子视图实现一个可选协议。 subview-class由uiviewcontroller继承,大多数viewcontrollers由此子视图继承。我认为这是一个简单的结构。

问题是:它只能在模拟器中运行。在设备上只显示第一个nslog,然后应用程序关闭。在模拟器上它工作正常。

它会是什么?

确定你知道,有些东西被注释掉了,但他们没有任何努力。

协议:

@protocol CustomGestures <NSObject>

@optional

-(void)nextPage;   
-(void)previousPage;

@end

我的子视图控件的一部分

@implementation SubViewController

//handles gestures and passes them
//further to the superclass
//uiviwcontroller to take the normal behaviour

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    //pass the information to superclass    
    [super touchesEnded:touches withEvent:event];   
    //create object with protocol and some other objects    
    id<CustomGestures> gestures;    
    UITouch* touch = [touches anyObject];   
    CGPoint currentPosition = [touch locationInView:self.view];

    CGFloat deltaX = gestureStartPoint.x - currentPosition.x;   
    CGFloat deltaY = fabs(gestureStartPoint.y - currentPosition.y);      
    //if the subclass (self) has the protocol implemented, use the protocoll-features   
    if ([self conformsToProtocol:@protocol(CustomGestures)])
    {       
        if (deltaX <= -80 && deltaY <= 20) { 
            NSLog(@"vorige seite");
            [gestures nextPage]; 
        } else 
            if (deltaX >= 80 && deltaY <= 20) {
                [gestures previousPage];
                 NSLog(@"nächste seite");
             }
         }

     }
}

子视图的一部分

 @interface NavInfos :
 SubViewController <CustomGestures>{
 ....}
 @implementation NavInfos
 //CustomGestures-Protocol

 -(void)nextPage{   
    NSLog(@"nächste seite im navinfos");     
    //[[TTNavigator navigator] openURLAction:[TTURLAction actionWithURLPath:@"tt://mapkit"]];//applyAnimated:YES]     
 }
 -(void)previousPage{   
     NSLog(@"vorige seite im navinfos");

    //[[TTNavigator navigator] openURLAction:[TTURLAction actionWithURLPath:@"tt://windows"]];
    //applyTransition:UIViewAnimationTransitionFlipFromLeft] applyAnimated:YES] 
 }

1 个答案:

答案 0 :(得分:2)

首先,由于您将这两种方法声明为@optional,因此对conformsToProtocol:的检查足以验证它们是否响应了相关方法。您应该删除@optional关键字或添加支票respondsToSelector:以及conformsToProtocol:优惠。

至于你的问题,你没有设置任何手势,但无论如何你都在调用方法。您想将其设置为某些内容(例如,自己)或将两个来电从[gestures ...]切换为[self ....]