2010-08-02 7 views
1

Je crée l'application iPhone à l'aide du SDK iPhone 4.0.1 J'ai les lignes de code suivantes dans mon application relatives aux notifications de lecteur multimédiaiphone - courir sdk 4.0.1 sur iPhone 3.1

[[NSNotificationCenter defaultCenter] 
     addObserver:self 
      selector:@selector(moviePreloadDidFinish:) 
       name:MPMoviePlayerLoadStateDidChangeNotification 
      object:m_player]; 

Lors de la construction de l'application, je vise le produit à l'iphone 3.1 Son bâtiment bien et fonctionne bien sur l'appareil iPhone 4.0 Mais l'application elle-même se bloque lors de l'exécution sur iPhone OS 3.1.3. Son don message suivant:

dyld: Symbol not found: _MPMoviePlayerLoadStateDidChangeNotification 

de Referenced: /var/mobile/Applications/8572A1FF-488D-4F97-93DD-C06DBAD23B5B/OrangeDemo.app/OrangeDemo attendus dans:/Système/Bibliothèque/Frameworks/MediaPlayer. cadre/MediaPlayer dans /var/mobile/Applications/8572A1FF-488D-4F97-93DD-C06DBAD23B5B/OrangeDemo.app/OrangeDemo

Comment puis-je éviter cette erreur.

Répondre

1

MPMoviePlayerLoadStateDidChangeNotification n'existe pas sur iOS 3.1.3. Vous devez détecter sa présence par l'intermédiaire faible liaison:

if (&MPMoviePlayerLoadStateDidChangeNotification != NULL) { 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePreloadDidFinish:) name:MPMoviePlayerLoadStateDidChangeNotification object:m_player]; 
} 

Avant iOS 3.2, vous pouvez utiliser MPMoviePlayerContentPreloadDidFinishNotification pour détecter quand le film a fini préchargement. Ce symbole peut générer un avertissement de deprecation si vous liez contre un récent SDK

Notez la syntaxe du chèque symbole (comme vous êtes, si vous utilisez MPMoviePlayerLoadStateDidChangeNotification.): Vous devez comparer à NULL plutôt que d'utiliser simplement le pointeur est le booléen (c.-à-d. if (MPMoviePlayerLoadStateDidChangeNotification) ou if (&MPMoviePlayerLoadStateDidChangeNotification).) Le compilateur et le chargeur dynamique ne sont pas capables de détecter et de gérer correctement ces formulaires, et se bloqueront sur 3.1.3 s'ils sont détectés.

+0

Pour une légère clarification, vous décrivez ici comment détecter la présence d'une méthode. Il aura toujours besoin d'un lien faible en trouvant la cible de l'application dans Xcode, en l'inspectant, et en allant dans l'onglet Général. Au bas de cet onglet devrait être une liste de cadres, avec une colonne pour Type. Changer le type pour MediaPlayer de requis à faible. –

+0

Vous ne devriez pas avoir besoin de changer le type de l'infrastructure, car il a été inclus depuis iOS 2.0. –