Question

Je rencontre des problèmes avec mon application universelle. J'ai mis le SDK de base pour iPhone 3.2 et définir la cible à 3.1.

Je l'ai déplacé les fichiers qui utilisent le UIPopoverController à leurs propres fichiers et ils ne devraient pas être chargés lors du chargement de l'application sur l'iPhone. Pourtant, quand je construis mon application, je reçois l'erreur suivante lorsque je construis et debug sur mon appareil:

  

dyld: Symbole non trouvé:   _OBJC_CLASS _ $ _ UIPopoverController de Référencée:   /var/mobile/Applications/B3B90643-92DC-4E5C-8B2F-83A42D6D57E0/citybikes.app/citybikes   Prévue:   /System/Library/Frameworks/UIKit.framework/UIKit   dans   /var/mobile/Applications/B3B90643-92DC-4E5C-8B2F-83A42D6D57E0/citybikes.app/citybikes

J'espère vraiment que quelqu'un peut me aider.

Cordialement, Paul Peelen

Était-ce utile?

La solution

Même s'ils ne sont pas chargés dans l'exécution, les fichiers sont toujours traités en liaison. Le _OBJC_CLASS_$_UIPopoverController symbole est donc ajouté dans votre application comme un de ceux nécessitant une liaison dynamique.

Il y a 2 solutions de contournement,

  1. Remplacer toute apparence de UIPopoverController dans un message (par exemple [UIPopoverController alloc]) avec NSClassFromString(@"UIPopoverController"), ou
  2. Faire UIKit faiblement liés.

Autres conseils

Je recommande fortement pas faiblement UIKit. Comme je l'ai mentionné KennyTM et dans nos commentaires, cela peut cacher des problèmes futurs de l'éditeur de liens et entraîner des accidents. Je suis aussi tout simplement pas à l'aise de dire à l'éditeur de liens que UIKit est facultative quand il est tout simplement pas. Big hack.

Au lieu de cela, initialiser et appeler UIPopoverController indirectement en utilisant NSClassFromString:

Class popover = NSClassFromString(@"UIPopoverController");
if (nil != popover)
{
    self.myPopover = [[popover alloc] initWithContentViewController:myContent];
}

Si vous avez encore des erreurs de l'éditeur de liens, vous devrez peut-être appeler les messages de UIPopoverController en utilisant NSSelectorFromString:

Class popover = NSClassFromString(@"UIPopoverController");
if (nil != popover)
{
    SEL myInit = NSSelectorFromString(@"initWithContentViewController:");
    self.myPopover = [[popover alloc] performSelector:myInit withObject:myContent];
}

Pour la portabilité, je recommande d'écrire un objet proxy pour gérer ces détails de mise en œuvre.

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