2011-09-18 3 views
0

Je travaille sur une application universelle qui utilise UIPopoverController pour la version iPad. Lorsque j'utilise le simulateur iPhone (version 4.3) pour tester les chemins de code conditionnel pour iPad et iPhone, ni le couplage faible ni l'approche NSClassFromString(@"UIPopoverController") n'indiquent le comportement attendu. Lorsque vous testez la liaison faible du framework UIKit, je m'assure d'utiliser le compilateur LLVM 2.1 et de rendre le framework UIKit 'Optionnel' dans 'Target-> Build Phases-> Link Binary with Libraries'. (Si je comprends bien est la façon de le faire dans Xcode 4.1).Problème avec la détection de la disponibilité de la classe UIPopoverController lors de l'exécution sur le simulateur iPhone

L'exécution du code

if ([UIPopoverController class]) { 
... 
_popover = [[UIPopoverController alloc] initWithContentViewController:controller]; 
... 
} 

sur le simulateur iPhone se bloque l'application indiquant que le [UIPopoverController class] ne retourne pas nil. Le remplacement de [UIPopoverController class] par NSClassFromString(@"UIPopoverController") ci-dessus entraîne le même plantage.

Est-ce que quelqu'un sait comment faire pour que ces vérifications conditionnelles fonctionnent sur le simulateur?

Répondre

-2

Essayez de déterminer si le code est en cours d'exécution sur un iPad. Si c'est le cas, vous pouvez utiliser UIPopoverController en toute sécurité.

- (BOOL)isPad 
{ 
    if ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)]) 
    { 
     return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad); 
    } 
    else 
    { 
     return NO; // all iPad OS's implement -userInterfaceIdiom 
    } 
} 
+0

Merci pour la réponse, je suis sûr que votre proposition fonctionne. Cependant, n'était pas le point de liaison faible et de tester des classes que vous devriez seulement tester pour la fonctionnalité que vous êtes sur le point d'utiliser et donc ne pas assumer sur quels dispositifs (éventuellement futurs) la fonctionnalité est (sera) présente. Pour cette raison, je voudrais vraiment tester la fonctionnalité et non pour l'appareil. – Jonas

0

classe UIPopoverController existe dans le cadre d'iOS à partir version 3.2 ne devrait donc pas revenir nul sur tout appareil avec la version iOS 4.x même iPhone, seul iPhone avec iOS 3.1.3 et ci-dessous vous obtenez nul avec faible (optionnel) reliant. Pour déterminer si vous pouvez utiliser cette classe, essayez la solution suggérée ci-dessus avec userInterfaceIdiom.

+0

Merci pour ce point de clarification. À la fin, j'ai utilisé la méthode de test pour UIUserInterfaceIdiomPad - et cela fonctionne comme je l'espère. J'ai en quelque sorte eu l'impression dans la documentation d'Apple que la meilleure pratique était de tester l'existence de la classe (et que, en particulier, la classe UIPopoverController n'existait pas du tout sur un iPhone). – Jonas

Questions connexes