2011-01-03 3 views
2

J'ai créé une cible iPad supplémentaire pour ce qui était à l'origine une application iPhone. "Dans presque tous les cas, vous voudrez définir une nouvelle classe de contrôleur de vue pour gérer la version iPad de votre interface d'application, surtout si cette interface est différente de votre interface iPhone. peut utiliser une compilation conditionnelle pour coordonner la création des différents contrôleurs de vues. "iOS - compilation conditionnelle (xcode)

Mais ils ne donnent aucun exemple ou détail sur ce qu'est la compilation conditionnelle. Quelqu'un peut-il donner un exemple? Et où ferais-je cela?

EDIT: J'ai essayé de définir les indicateurs C suivants dans la cible iPad: -D USE_IPAD, -DUSE_IPAD. De toute façon, ce code entraîne toujours IPHONE se connecté:

#ifdef USE_IPAD 

     NSLog(@"IPAD"); 

    #else 

     NSLog(@"IPHONE"); 

    #endif 

Qu'est-ce que je manque?

Répondre

2

Une autre approche qui peut être préférable à la compilation conditionnelle est une déclaration if else straight-forward:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    // iPad code 
} else { 
    // iPhone or iPod Touch code 
} 

Je préfère cette condition sur la compilation que je trouve plus facile à entretenir et moins de bruit de ligne.

+0

Ça marche, merci. – sol

2

Conditional compilation est l'endroit où vous utilisez les directives du compilateur (ou les indicateurs du compilateur) pour contrôler la compilation.

#ifdef SOME_CONDITION 

//This will only be compiled if SOME_CONDITION is defined as a compiler flag 

#else 

//Otherwise, this code will compile. 

#endif 

Vous pouvez définir des directives de compilation dans vos paramètres de projet. Faites un clic droit sur votre Ciblez (créez plusieurs cibles, une pour l'iPhone et une pour l'iPad, par exemple) et cliquez sur Obtenir des informations. Faites ensuite défiler jusqu'à Other C Flags. Vous pouvez y ajouter un ou plusieurs drapeaux.

alt text

EDIT:

Il semble que je fait la même erreur que vous avez fait. Un peu de googling rapide me conduit à la Apple documentation andthis blog post qui dit que vous devrez peut-être ajouter un nouveau champ pour les paramètres de construction.

+0

À quelle cible dois-je définir les drapeaux C? La cible iPhone ou iPad? – sol

+0

Eh bien, vous créez une cible pour chacun et ensuite dans la cible de l'iPhone, vous spécifieriez l'iPhone. Dans l'iPad, vous spécifiez iPad. Ou, vous pouvez le spécifier dans celui que vous voulez et juste faire le '# else' l'autre. – Moshe

+0

S'il vous plaît voir mon edit ci-dessus, dans la question d'origine. – sol

Questions connexes