2016-12-06 3 views
0

Compte tenu de la méthode suivante:Quelles sont les causes « méthode « foo » est défini dans la classe « Bar » et n'est pas visible » dans AppCode

- (void)sendEvent:(UIEvent *)event 
{ 
    NSSet *allTouches = [event allTouches]; 

    if ([allTouches count] > 0) 
    { 
     _lastUserTouchTime = [[NSDate date] timeIntervalSince1970]; 
    } 

    [super sendEvent:event]; 
} 

Les [allTouches événement] génère l'avertissement d'inspection suivant AppCode 2016,3.

"Méthode 'allTouches' est défini dans la classe 'UIEvent' et ne sont pas visibles"

allTouches est définie dans < UIKit/UIEvent.h> que je l'ai essayé, y compris à pas effet. Xcode ne semble pas avoir de problème avec ce morceau de code. Quelqu'un a un aperçu à ce sujet?

+0

Cela semble correct. Avez-vous essayé dans un événement délégué? Comme; - (void) touchesBegan: (NSSet *) touche l'événementEvent: (UIEvent *) –

Répondre

1

C'est parce que allTouches est définie comme la propriété

Regardez ce code:

NS_CLASS_AVAILABLE_IOS(2_0) @interface UIEvent : NSObject 
... 
#if UIKIT_DEFINE_AS_PROPERTIES 
@property(nonatomic, readonly, nullable) NSSet <UITouch *> *allTouches; 
#else 
- (nullable NSSet <UITouch *> *)allTouches; 
#endif 
... 
@end 

Les versions ultérieures d'iOS SDK utilise les propriétés plutôt que des méthodes. Et, AppCode a des vérifications de type plus strictes que Xcode. C'est pourquoi Xcode compile silencieusement et AppCode donne des avertissements