2010-04-14 5 views
3

J'ai de gros soucis depuis que j'ai téléchargé la version bêta d'iPhone SDK 4.0. Bon, je viens de commencer à regarder le développement de l'iPhone il y a quelques semaines, mais je n'arrive pas à comprendre comment Xcode fonctionne:Comment démarrer un projet iPhone 3.1.3 dans Xcode 3.2.3 (iPhone SDK 4 beta)

chaque fois que je lance un nouveau projet, je choisis un modèle comme "Application basée sur la vue" ou alors. Maintenant, la cible sera toujours (au moins je n'ai trouvé une préférence nulle part!) Être le dernier SDK: 4.0. Mais alors: changer la cible à, disons, 3.1.3 les fichiers de modèle semblent contenir des erreurs! Lancement d'une application vide ainsi produit une exception:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: [...] this class is not key value coding-compliant for the key rootViewController

Raison, il semble, est que le MainWindow.xib généré a une "prise de référence" pour RootViewController à côté d'un viewController ...

malade

maintenant, mon (stupide) question: Comment puis-je développer une application PAS ciblant le dernier SDK, mais la norme 3.1.3 SDK ?? En d'autres termes: Je me attends Xcode non seulement de demander un type de projet dans la fenêtre Nouveau projet, mais aussi pour ma plate-forme cible souhaitée pour générer les modèles corrects !!

Ai-je raison que les modèles générés par cette étape ne sont pas valides pour toute autre cible de 4,0? Comment cela peut-il être ??

... Je veux récupérer mon Eclipse! sigh

Quelqu'un peut-il m'aider s'il vous plaît?

+0

Essayer de trouver la réponse à cela aussi. Maintenant que SDK4 n'est plus en version bêta, c'est toujours un problème. – nessence

Répondre

0

La réponse à la question que je cherchais semble être:

Il est impossible.

Développer une certaine version iOS, installez le Xcode approprié. Apple apparemment ne connaît pas les personnes qui veulent développer pour plusieurs plates-formes cibles à la fois. :-(

1

simple: ne pas utiliser le SDK bêta, qui vise à ce stade pour le développement d'applications pour une version inédite du système d'exploitation, et dont vous avez accepté un NDA. Alors, téléchargez la version publiée du SDK, et soyez heureux.

+0

Cela pourrait aider dans la situation actuelle - mais s'il vous plaît: comment développer une application pour une version inférieure du SDK dans n'importe quelle version de Xcode? Que faire quand je veux un SDK cible encore plus bas? Je ne peux pas m'empêcher de lutter avec Xcode - l'IDE le plus crade que j'ai jamais vu ... :-( Dans un monde informatique "normal" j'essaie de nouvelles versions d'EDI parce que je pense qu'il pourrait y avoir de nouvelles fonctionnalités Dans le monde d'Apple, est-ce que je dois installer la version du SDK qui était destinée à une cible spécifique? En d'autres termes: installer plusieurs Xcodes ??? – Zordid

+3

Non, cela signifie ne pas se plaindre des versions bêta et don Et non, Xcode n'est pas l'IDE le plus crade, Eclipse est (critiquer quelque chose que vous n'avez pas fait l'effort de comprendre n'est pas intelligent.) Si vous voulez cibler une version précédente du système d'exploitation, il suffit de définir la base SDK dans l'inspecteur cible - ouvrez le groupe Cible, double-cliquez sur la cible de votre application et tapez SDK dans la barre de recherche –

+0

Ce problème est maintenant une situation NON-BETA Il se produit avec la version finale du SDK. tu ne Je pense que c'est pertinent - mieux que de flamber l'OP. – nessence

1

La résolution que j'ai trouvé ajouter manuellement mon point de vue à la fenêtre en didFinishLaunchingWithOptions au lieu de compter sur la connexion Interface Builder. Il semble que le fait de câbler rootViewController w/iOS4 IB provoque le blocage de l'application lors du déploiement en 3.x (3.1.3 pour moi).

Ainsi, le premier IB ouvert, faites un clic droit sur la fenêtre, et assurez-vous « RootViewController » est pas connecté. Ensuite, dans votre AppDelegate, vous devriez avoir quelque chose comme

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [self.window addSubview:navigationController.view]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

Ceci est pour si votre point de vue principal est un NavigationController; Si ce n'est pas le cas, modifiez addSubview en conséquence.

2

Juste au cas où quelqu'un est à la recherche de cela.

Vérifiez simplement si la fenêtre répond d'abord à la fonction. Si c'est le cas (4.0 et plus), utilisez-le, sinon utilisez d'abord la version pré-4.0.

if([self.window respondsToSelector:@selector(rootViewController)]) { 
    self.window.rootViewController = self.viewController;   
} else { 
    [self.window addSubview :self.viewController.view];   
} 
0

Je pense que François a une excellente réponse.

Je suis également nouveau à Xcode et travaillais à travers divers didacticiels utilisant Xcode 3.2.6 et testant sur le périphérique iOS 3.1.3. Les tutoriels étaient pour iOS 4.3, qui commencent tous par sélectionner une "application basée sur la vue". Quand j'ai testé les tutoriels, ils ont travaillé dans le simulateur mais pas sur l'appareil. Je suppose que c'est vrai pour le SDK 4 mais je ne l'ai pas essayé moi-même.

J'ai d'abord reçu l'erreur: "... spécifie une version OS minimale de 4.3, ce qui est trop élevé pour être installé sur l'iPhone." Beaucoup d'autres personnes ont abordé ce problème mais il est résolu en allant dans Projet> Modifier les paramètres du projet, en sélectionnant l'onglet Construire, en faisant défiler la section Déploiement et en changeant le champ "Cible de développement iOS" pour qu'il soit identique à iOS sur l'appareil. Ensuite, les applications du didacticiel se lancent sur le téléphone, mais seul un écran vide s'affiche et j'ai l'erreur: "SIGABRT" et "NSException" - même lorsque j'ai essayé de lancer une simple application HelloWorld. Cela a été causé par le self.window.rootViewController = self.viewController n'étant pas supporté par iOS 3.

Pour le réparer, allez dans le fichier ___ Delegate.m et remplacez la ligne "self.window.rootViewController = self.viewController" avec une solution élégante de François:

if([self.window respondsToSelector:@selector(rootViewController)]) { 
    self.window.rootViewController = self.viewController;   
} else { 
    [self.window addSubview :self.viewController.view];   
} 

maintenant, le modèle d'application-View SDK 3.2 pour iOS fonctionne 3 et 4.

Questions connexes