2010-10-04 5 views
3

Je suis en train de développer une application iPhone qui est un "module" d'un autre lanceur (elle ne démarre pas à partir de l'écran d'accueil de l'iPhone). Pour ajouter ce module au lanceur, je dois déposer le fichier xcode dans le projet xcode parent (en créant un sous-projet). Le sous-projet utilise un fichier NIB comme contrôleur de vue et le sous-projet charge le fichier en utilisant initWithNib:Comment utiliser les fichiers InterfaceBuilder dans les sous-projets Xcode?

root_view_controller = [[UINavigationController alloc] initWithRootViewController:[[LMU_IP_RootView alloc] initWithNibName:@"LMU_IP_RootView" bundle:nil]]; 

Lorsque je tente d'exécuter le projet parent, il se bloque avec:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle [...] (loaded)' with name 'LMU_IP_RootView'' 

Je devine C'est parce qu'il ne peut pas trouver le fichier NIB parce que le paquet racine est maintenant le projet parent au lieu du sous-projet. Je pourrais inclure la NIB dans le projet parent et cela corrige l'erreur, mais ne résout pas mon problème.

Donc ma question: Comment utiliser les fichiers InterfaceBuilder dans un sous-projet? Dois-je spécifier un bundle? Comment puis-je spécifier un ensemble qui fait référence à ce sous-projet?

Merci!

+0

Quelqu'un peut-il être utile? Ai-je besoin de clarifier ou de publier des exemples de fichiers? – Daniel

Répondre

0

Lorsque le lot est nil, la recherche est effectuée dans le lot principal, et non dans votre ensemble de sous-projets. Je ne suis pas tout à fait clair sur l'architecture de votre application, mais essayez de spécifier le paquet contenant la classe comme le faisceau de recherche:

NSBundle *classBundle = [NSBundle bundleForClass:[LMU_IP_RootView class]]; 
id vc = [[LMU_IP_RootView alloc] initWithNibName:nil bundle:classBundle] 
root_view_controller = [[UINavigationController alloc] 
         initWithRootViewController:vc]; 
[vc release]; 

Notez que un nom par défaut nib nil à « ClassName .nib », donc LMU_IP_RootView.nib sera recherché dans ce cas.

Il est généralement préférable de remplacer -init dans votre classe de contrôleurs de vue pour qu'il effectue la recherche correcte. Ensuite, le code client n'a pas à se soucier des besoins de la classe.

+0

Ha, eh bien cette question est un peu ancienne, mais j'apprécie votre réponse. Il s'avère que j'étais juste dense: mon "sous-projet" était en fait une bibliothèque statique alors quand il a dit qu'il ne pouvait pas trouver les ressources ... c'était parce qu'ils n'étaient pas là. Une fois que j'ai réalisé mon erreur, j'ai simplement inclus les fichiers du constructeur d'interface avec l'application qui référençait la bibliothèque statique et tout allait bien à nouveau. – Daniel

Questions connexes