Appeler une fonction dans AppDelegate?
À la suite de la solution (la plus haute voté réponse, en fait) à UITextField Exemple dans Cocos2d, j'ai réussi à le faire à l'exception de la ligne
[[[UIApplication sharedApplication] delegate] specifyStartLevel];
Je l'ai placé dans ma scène, je reçois cet avertissement:
Méthode d'Instance '-specifyStartLevel' not found (type de retour par défaut à 'id')
Pourquoi est-ce? J'ai clairement avoir -specifyStartLevel
défini dans l'en-tête et la mise en œuvre de mon AppDelegate...
Modifier: Déclaration de specifyStartLevel
#import <UIKit/UIKit.h>
@class RootViewController;
@interface AppDelegate : NSObject <UIApplicationDelegate,UITextFieldDelegate> {
UIWindow *window;
UITextField *levelEntryTextField;
RootViewController *viewController;
}
- (void)specifyStartLevel;
@property (nonatomic, retain) UIWindow *window;
@end
Et la mise en œuvre:
- (void)specifyStartLevel
{
[levelEntryTextField setText:@""];
[window addSubview:levelEntryTextField];
[levelEntryTextField becomeFirstResponder];
}
Veuillez fournir le code de la déclaration de specifyStartLevel.
OriginalL'auteur Voldemort | 2011-11-22
Vous devez vous connecter pour publier un commentaire.
Dès maintenant, votre classe ne sais rien à propos de votre délégué de méthodes. Vous avez besoin d'importer votre délégué dans votre mise en œuvre, non pas de votre interface (pour éviter parcouru les importations).
Par exemple,
Alors vous devez jeter la retourné délégué dans votre imbriquée à l'appel de la méthode à votre type de délégué. Par exemple:
C'est bizarre. Veuillez définir un point d'arrêt ou de mettre un journal à l'intérieur de la
specifyStartLevel
fonction pour voir si elle est à même de fonctionner lorsqu'il est appelé à partir à l'intérieur de votre sous-classe.Il semble qu'il est appelé, après tout. Toutefois, le clavier ne semble pas visible à tous.
Eh bien, c'est bizarre. Je venais tout juste de créer une nouvelle question ici DONC, avec votre problème plutôt que d'essayer de le comprendre ici.
Ah! J'ai été la création de l'objet UITextField après exécution de la scène. Et la scène a été en essayant d'ouvrir le clavier à partir de la méthode init... Merci monsieur.
OriginalL'auteur sudo rm -rf
Ajouter votre méthode dans
AppDelegate.h
de fichiers tels que:Mettre en œuvre la méthode dans
AppDelegate.m
de fichiers tels que:Définir la
UIApplication
délégué de la méthode, tels que:OriginalL'auteur Rajaram
-[UIApplication delegate]
retourne un objet de typeid<UIApplicationDelegate>
, de sorte que le compilateur ne connaît que les méthodes que les objets de ce type d'y répondre, de même pensé à votre délégué personnalisé répond àspecifyStartLevel
. Vous pouvez ignorer l'avertissement, ou de la fonte de la valeur de retour de-[UIApplication delegate]
:Vrai, mais dans ce cas, c'est définitivement à l'abri de l'ignorer.
yup, il est totalement innocent jusqu'à ce que vous modifiez la signature de la méthode et d'oublier de mettre à jour d'ailleurs dans le code. Si tu avais retiré l'origine d'avertissement vous pouvez alors obtenir une belle nouvelle à vous raconter. Si j'ai eu mon chemin, je serais toujours compiler avec
-Werror
L'un des inconvénients de travailler avec un dynamiquement typés de la langue. Les tests unitaires doivent pratiquement d'éviter de telles erreurs. Mais, vous pouvez lancer si vous êtes si incliné, de sorte que le meilleur des deux mondes.
OriginalL'auteur mipadi
Vous devez importer le AppDelegate dans le .m de fichier lorsque vous utilisez
J'aime l'importer avec un en-tête qui me donne un raccourci.
Puis, quand je l'utiliser dans n'importe quelle classe je viens de
- Je utiliser cette méthode parce que je peux stocker plus des #define pour certaines constantes globales
(c'est à dire soundFXVolume -
#define SOUND_FX_V 0.6
)lololol (15 ch)
OriginalL'auteur Jesse Black