2010-10-08 5 views
1

Je construis un universel pour iphone/ipad et j'ai déjà fixé la cible de déploiement à 3.0. Il peut bien fonctionner sur iPad 3.2 et iPhone 4.1. Cependant, quand je le compile et l'exécute sur mon iPod 3.1.3, le moteur d'exécution choisit automatiquement le chemin de code d'iPad et me dit qu'il ne peut pas trouver UIPopOverController et UIMenuItem. Dans mon code de chemin iPhone, je n'utilise rien de tel.Comment faire une application universelle (iPad et iPhone 4.1) fonctionne sur iPod 3.1.3

Il construit avec succès et seulement en essayant de courir, il dit erreur et ne peut pas trouver:

dyld: Symbol not found: _OBJC_CLASS_$_UIPopoverController 
    Referenced from: /var/mobile/Applications/My_APP 
    Expected in: /System/Library/Frameworks/UIKit.framework/UIKit 

editted:

Si je supprime toutes mes classes iPad et définissez les App.info Le faisceau principal de nib doit être iphone seulement. Ensuite, ça fonctionne bien. Je pense que le problème est qu'il fonctionne le code de l'iPad. Je ne sais pas ce qui ne va pas avec mon iPod ou mon projet

+1

double possible de [erreur de compilation de débogage d'applications iPhone/iPad universel pour les tests iPhone] (http://stackoverflow.com/questions/2618889/iphone-ipad-ipad-application-debug-compilation-erreur-pour-iphone-testing) –

+0

C'est vrai. Merci de partager le lien – vodkhang

Répondre

2

Vous devez effectuer des tests d'exécution pour les classes qui ne sont pas présentes sur 3.1.3. Vous ne pouvez pas avoir de code comme [UIPopoverControler alloc], et vous devez créer un lien hypertexte vers les frameworks.

Voir les réponses à cette question:

How should I approach building a Universal iOS app that will include iOS 4 features, even though the iPad doesn't yet run iOS 4?

(La question est différente de la vôtre, mais la racine du problème est le même.)

Ou cet article:

http://cocoawithlove.com/2010/07/tips-tricks-for-conditional-ios3-ios32.html

+0

+ 1 pour partager le lien. Mais je pense que ce n'est pas mon problème. J'ai déjà essayé de vérifier les attributs iOS4, je pense que mon problème est que Xcode détecte automatiquement mon iPod en tant qu'appareil iPad et exécute le code iPad – vodkhang

+0

Pouvez-vous mettre à jour votre question pour montrer comment vous décidez si vous voulez exécuter le code ipad ou le code de l'iphone? xcode ne prend pas soin de cela pour vous, vous devez vérifier et charger manuellement la bonne plume, etc., par exemple en utilisant [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) – JosephH

+0

Avez-vous déjà essayé avec l'application universelle? Il détermine dans le fichier Info.plist en spécifiant la première fenêtre. Je viens de spécifier MainWidow_iPhone.xib pour iPhone et MainWindow_iPad.xib pour iPad. J'ai testé dans l'iPhone 4.0 et l'iPad 3.2, cela fonctionne bien, seul problème avec l'iPod 3.1.3 – vodkhang

1

Si vous voulez simplement contourner les problèmes de temps de compilation depuis que cet appareil Je ne ai jamais le code en question, alors vous pouvez simplement appeler les classes etc popover ainsi:

Class infopopclass = NSClassFromString(@"UIPopoverController"); 
if(infopopclass) { 
    id infopop = [[infopopclass alloc] initWithContentViewController:myPopViewController]; 
    [infopop presentPopoverFromRect:CGRectMake(20, 70, 10, 10) inView:self.view permittedArrowDirections:4 animated:YES]; 
} 
Questions connexes