Question

Dans l'iPhone SDK 3.2, [CLLocation getDistanceFrom:] a été renommé [CLLocation distanceFromLocation:]. Mon projet est compilé avec le SDK 3.2 comme base et une « cible de déploiement » de 3,0, ce qui signifie que les cadres disponibles en 3.2 sont faibles liés donc mon application peut encore fonctionner sur 3.0.

Si je change mes appels à utiliser le nouveau distanceFromLocation: nom, ce qui se passera sur les appareils fonctionnant sous 3.0 ou 3.1? I prendre que l'appel de méthode échouera et 0.0 sera retourné (comme Cocoa retourne la valeur par défaut pour les sélecteurs non reconnus).

Si mon hypothèse est correcte cela signifie que je dois vivre avec les avertissements du compilateur pour l'instant, jusqu'à ce que je ne veux plus cibler 3.0.

Était-ce utile?

La solution

  

Si je change mes appels à utiliser le nouveau nom distanceFromLocation :, ce qui se passera sur les appareils fonctionnant sous 3.0 ou 3.1? Je suppose que l'appel de méthode échouera et 0.0 sera retournée (Cocoa retourne la valeur par défaut pour les sélecteurs non reconnus).

Non, vous envisagez d'envoyer un message à nil. L'envoi d'un message à un objet qui ne reconnaît pas le sélecteur provoquera une exception. Si vous ne surprenez pas cette exception, votre application se bloque. Les utilisateurs ne seront pas comme cela, et Apple peut rejeter votre application dessus.

La solution consiste à tester si l'emplacement répond au nouveau sélecteur:

if ([here respondsToSelector:@selector(distanceFromLocation:)])
    distance = [here distanceFromLocation:there];
else if ([here respondsToSelector:@selector(getDistanceFrom:)])
    distance = [here getDistanceFrom:there];

Par ailleurs, cela n'a vraiment rien à voir avec la liaison. Si nous parlions d'une classe qui avait changé de nom, il serait, mais les moyens d'expédition de messages dynamiques « appels de méthode » Objective-C (plus précisément, les messages à des objets) ne sont pas liés à la compilation ou lien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top