2010-12-02 5 views
3

Dans l'application que nous sommes en train de créer, nous souhaitons utiliser UILocalNotifications, qui n'est disponible qu'à partir de la version 4.0.Activation de différentes fonctionnalités en fonction de la version iOS

La vérification de la réponse d'un objet à un sélecteur est assez simple, mais comment puis-je définir les méthodes de délégation d'une classe en fonction du système d'exploitation? Le problème que je reçois est que mon délégué application implémente la méthode

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 

, ce qui rend le plantage de l'application au démarrage sur un périphérique iOS 3.2 (ipad).

Ne pas avoir à libérer plusieurs générations serait préférable.

Répondre

6

Vous devez utiliser une fonctionnalité appelée "liaison faible", qui fonctionnera avec iOS 3.1 ou version ultérieure. Vous devez suivre certaines étapes très spécifiques décrites dans la section 4.2 “what's new” document (recherchez "liaison faible" dans le document).

HTH!

+0

C'est ce que j'ai utilisé et ça a bien fonctionné. Merci beaucoup. – sharvey

3

Une bonne façon est de vérifier:

#ifdef __IPHONE_4_0 // if iPhoneOS is 4.0 or greater then __IPHONE_4_0 will be defined 

    //code 
#endif 

Si vous avez affaire à un système d'exploitation 4.0 ci-dessous, si ne voit même aucun code dans cette directive du compilateur.

+1

Merci, mais ne pas utiliser #ifdef bande simplement le code de compilation si la cible est inférieur à 4,0? – sharvey

+0

sûr, mais n'avez-vous pas besoin de retirer cette méthode, si le périphérique est inférieur à 4.0? –

+0

En effet, mais j'ai probablement besoin de plusieurs cibles pour les différentes versions iOS, non? – sharvey

-1

Vous pouvez modifier les méthodes de délégués à utiliser id comme type pour les classes ne sont pas disponibles sur 3.2, qui est la suivante:

-(void)application:(UIApplication *)application didReceiveLocalNotification:(id)notification 

Dans le corps de la méthode, vérifiez UILocalNotification comme d'habitude. L'argument notification peut être classé en UILocalNotification.

Je suis surpris que cela provoque un crash, car la méthode ne devrait pas être appelée. Si changer le type dans la définition de la méthode n'aide pas, il se peut que la méthode soit appelée pour une raison quelconque. Dans ce cas, essayez de définir un point d'arrêt dans la méthode pour savoir pourquoi.

+0

En référençant la classe, GCC l'inclura dans les symboles de l'application et provoquera son arrêt brutal au moment de l'exécution si le symbole n'est pas trouvé. Vous devez suivre certaines règles spécifiques pour que les liaisons faibles fonctionnent. –

Questions connexes