iphone: протокол работает в симуляторе, но не на устройстве - я не знаю больше - PullRequest
0 голосов
/ 02 августа 2010

Я хотел реализовать дополнительный протокол для моих подпредставлений.subview-class наследуется uiviewcontroller, и большинство viewcontrollers наследуется этим subview.я думаю, что это простая структура.

проблема в том, что она работает только в симуляторе.на устройстве появляется только первый 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 Ответ

2 голосов
/ 02 августа 2010

Прежде всего, поскольку вы объявляете эти два метода как @optional, проверка на conformsToProtocol: является недостаточной , чтобы убедиться, что они отвечают на указанные методы. Вам следует либо удалить ключевое слово @optional, либо добавить чек к respondsToSelector:, а также сделку conformsToProtocol:.

Что касается вашей проблемы, вы не устанавливаете жесты на что-либо, но вы все равно вызываете методы в ней. Вы хотите установить его на что-то (например, самостоятельно) или переключить два вызова с [gestures ...] на [self ....].

...