2010-05-04 2 views
2
-[UIViewController _loadViewFromNibNamed:bundle:] was unable to load a nib named "TwitterDrilldownView" 

Je reçois l'erreur ci-dessus lorsque j'appuie un nouveau ViewController sur la pile de navigation. Voici le code de poussée,n'a pas pu charger une plume nommée "TwitterDrilldownView"

[self.navigationController pushViewController:[[[TwitterDrilldownViewController alloc] initWithTwitterAnnotation:temp] autorelease] animated:YES];

En fait, je suis juste une vue nouvellement pousse et initialisé sur la pile. La méthode d'initialisation du ViewController est,

- (id)initWithTwitterAnnotation:(TwitterInfo *)aPOI { 
    if(self = [super init]) { 
    poi = aPOI; 
    } 

    return self; 
} 

Comme vous pouvez le voir, je n'utilise pas avec la méthode initialize de pointe et il n'y a pas de fichier nib nommé TwitterDrilldownView dans mon projet.

J'avais un fichier nib avant de créer le TwitterDrilldownViewController appelé TwitterDrillDownView mais je l'utilisais pour tester une mise en page et, encore une fois, je ne l'ai jamais utilisé. Lorsque j'ai créé TwitterDrilldownViewController, le fichier TwitterDrillDownView.nib était présent dans le projet et c'est après cette étape que j'ai supprimé la plume. La seule cause de ce problème que je peux penser est que Xcode a créé une dépendance sur le fichier nib parce que le fichier nib et le contrôleur de vue sont nommés les mêmes (TwitterDrilldownView.nib, TwitterDrilldownViewController.m), comme si essayait d'être utile mais finit par gâcher mon projet.

J'ai essayé de supprimer et de recréer le contrôleur de vue dans l'espoir que toutes les références seront détruites, et supprimé toute référence aux fichiers nib dans le projet, mais en vain.

Quelqu'un a-t-il eu de l'expérience avec ce problème ou connaît-il une solution possible?

+0

ayant exactement le même problème après la suppression d'une NIB - avez-vous déjà résolu celui-ci? – toblerpwn

+0

Ma résolution était de renommer le ViewController, malheureusement la seule chose que je pouvais faire. Deviner un bug connecté avec Apple serait une bonne idée si elle est encore cassée 2+ ans plus tard :) – sciritai

+0

:) J'ai également trouvé une autre solution, que je vais noter ci-dessous .. – toblerpwn

Répondre

2

Cela m'est également arrivé après la suppression d'un fichier XIB de mon projet. Cependant, j'ai fait quelques déconner et j'ai pu résoudre le problème.

Le point clé est que Xcode semble garder une sorte de référence quelque part que vous créez et XIBs points/actions en leur sein, et la suppression d'un fichier simplement orphelins manuellement XIB ces références.En supprimant ces connexions une par une, en utilisant le constructeur d'interface (UB) et le XIB semble les décoder correctement.

La solution est alors assez clair:

  1. Recréer un fichier du même XIB nom et construction similaire (y compris les points de vente et les actions que vous aviez avant). (Remarque: Si vous ne parvenez pas à reconstituer les prises et les actions du XIB, recréez simplement le fichier XIB portant le même nom et passez à la note «s'il ne fonctionne toujours pas» ci-dessous.)
  2. Manuellement, un par un, supprimez tous les points de vente et les actions de votre XIB à l'aide du constructeur d'interface (IB).
  3. Reconstruisez l'application; Si cela fonctionne maintenant, vous pouvez supprimer le XIB.

(Note: S'il est toujours défaut, vous aurez probablement une autre erreur Si l'erreur se réfère à la conformité clé-valeur alors il liste une méthode dans l'erreur - et cette méthode est votre. Assurez-vous de recréer la sortie/l'action nommée dans IB et supprimez-la manuellement à l'aide de IB. Cela semble décoder l'appel dans Xcode/votre environnement de construction.)

Bonne chasse!

+0

Très bien, je suis heureux de passer à la réponse acceptée car vous avez spécifié des étapes beaucoup plus utiles pour le débogage et la résolution du problème. – sciritai

1

UIViewController doit être initialisé à l'aide de la méthode initWithNibName:bundle:. Dans sa description a déclaré:

Ceci est l'initialiseur désigné pour cette classe.

Si vous spécifiez zéro pour le paramètre nibName et ne pas passer outre la méthode loadview dans votre commande sous-classe, le contrôleur d'affichage par défaut le comportement est de rechercher un fichier nib dont le nom (sans le .nib l'extension) correspond au nom de votre classe de contrôleur de vue . Si elle trouve un, le nom de la classe devient la valeur de la propriété nibName, ce qui résulte dans le fichier nib correspondant étant associé à ce contrôleur de vue.

Donc, si vous ne faites pas vous charger la vue contrôleur de fichier nib que vous remplacez la méthode loadView et contrôleur de propriété mis view en elle.
Espérons que cela aidera.

+0

Grand commentaire et merci pour cette info (je didn ' Je sais que) mais dans ce cas, il ne s'applique pas car j'ai d'autres contrôleurs de vue qui sont initialisés exactement de la même manière, tous ne nécessitant aucune surcharge de loadView. La seule différence est que je n'ai pas de fichier nib pour les autres, donc je reste convaincu qu'il doit y avoir un bug quelque part dans Xcode. J'ai résolu le problème en renommant légèrement mon TwitterDrilldownViewController et cela fonctionne maintenant. Je peux seulement supposer que Xcode a une référence incorrecte à l'ancien fichier nib et je suis toujours curieux si quelqu'un d'autre a eu ce problème. Merci encore. – sciritai

+0

hm, peut-être que vous devriez marquer ma réponse comme acceptée - peut-être quelqu'un pointera vers une solution réelle à ce problème? – Vladimir

+0

Je pense que votre réponse est bonne pour ceci et aidera n'importe qui d'autre qui a ce problème. Mon problème spécifique semble être très obscur alors je vais en rester là. – sciritai

Questions connexes