Comment résoudre "aucune méthode d'instance connue pour le sélecteur" performSelector: withObject: afterDelay: '"lors de la migration vers ARC?
L'ARC de l'outil de migration est en refusant d'accepter ce code avant de commencer la migration:
[self.delegate performSelector:@selector(overlayDismissed:) withObject:self afterDelay:0];
Le délégataire est contraint de mettre en œuvre cette méthode avec un protocole, et il devrait fonctionner correctement:
@protocol OverlayDelegate <NSObject>
- (void)overlayDismissed:(Overlay*)overlay;
@end
@interface Overlay : UIImageView {
id<OverlayDelegate> delegate;
}
@property (nonatomic, assign) id<OverlayDelegate> delegate;
Quel est le problème avec l'ARC? Pourquoi est-il en me disant qu'il n'y a "pas d'exemple connu de la méthode pour le sélecteur 'performSelector:withObject:afterDelay:'?
source d'informationauteur openfrog
Vous devez vous connecter pour publier un commentaire.
ARC n'est pas la cause de cela - il est simplement l'exposer. Cette méthode est définie sur NSObject - mais id travaille pour plus que juste NSObject (de sorte que vous devez être plus précis que de simplement 'id'). Modifier votre code:
Simple, votre objet est de type
id
et est conforme à laNSObject
protocole. Toutefois, ce protocole n'est pas déclaréperformSelector:withObject:afterDelay:
de sorte que l'ARC ne sait pas ce que la méthode est en train de faire et si il doit les conserver quoi que ce soit. Soit utiliser un NSObject ou le jeter avant de faire l'appel de la méthode.J'ai compris que le casting du délégué de NSObject* résout le problème:
Pour quelque étrange raison, elle n'a même pas venir avec
-performSelector:withObject:afterDelay:
j'ai donc eu à les saisir manuellement. Au lieu de cela, il a offert uniquement-performSelector:
et-performSelector:withObject:withObject:
Ma conjecture est que c'est juste stupide pour utiliser l'id que le type à l'intention des délégués en Objective-C, et je n'ai jamais vraiment su pourquoi tout le monde y compris moi-même fait que, plutôt que de simplement définir comme NSObject. Cependant, mon protocole même dit que celui qui est conforme à ce protocole doit également se conformer à la NSObject protocole en faisant ceci:
OverlayDelegate <NSObject>
- et encore, le compilateur n'a pas l'obtenir.Donc pour l'instant je suis satisfait, il travaille avec la fonte, mais il se sent comme de manger des poissons âgés.
J'ai rencontré d'erreur:
La raison en est que : nom de fichier n'est pas égal au nom de la classe avec
@interface
et@implementation
.