2011-10-02 7 views
2

J'essaie de faire une "liste d'articles" -> "détails de l'article" d'une sorte d'application. J'ai réussi à faire la partie de la liste très bien jusqu'à présent. J'ai également créé une nouvelle vue pour les détails de l'article, mais j'ai une erreur lorsque je clique sur l'élément dont je veux voir les détails. Jusqu'à présent, la nouvelle vue n'a qu'une étiquette vide indiquant "View Changed: OK". Rien d'autre. ItemDetailsView est une vue qui hérite de UIViewController.pushViewController échouant

Pour créer cette vue, je suis allé à New File -> Cocoa Touch -> sous-classe UIViewController.

L'erreur que je reçois est un « signabrt » lorsque je tente d'exécuter la ligne ci-dessous // erreur ICI

suit Voici le message complet:

2011-10-02 17:26:03.582 Teste Data Nav[10035:b303] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/leo/Library/Application Support/iPhone Simulator/4.3.2/Applications/FA60D1E7-1B98-4943-98AA-C86A2339AC3E/Teste Data Nav.app> (loaded)' with name 'DetailView'' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x00dc25a9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x00f16313 objc_exception_throw + 44 
    2 CoreFoundation      0x00d7aef8 +[NSException raise:format:arguments:] + 136 
    3 CoreFoundation      0x00d7ae6a +[NSException raise:format:] + 58 
    4 UIKit        0x0020f0fa -[UINib instantiateWithOwner:options:] + 2024 
    5 UIKit        0x00210ab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168 
    6 UIKit        0x000c6628 -[UIViewController _loadViewFromNibNamed:bundle:] + 70 
    7 UIKit        0x000c4134 -[UIViewController loadView] + 120 
    8 UIKit        0x000c400e -[UIViewController view] + 56 
    9 UIKit        0x000c2482 -[UIViewController contentScrollView] + 42 
    10 UIKit        0x000d2f25 -[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:] + 48 
    11 UIKit        0x000d1555 -[UINavigationController _layoutViewController:] + 43 
    12 UIKit        0x000d27aa -[UINavigationController _startTransition:fromViewController:toViewController:] + 326 
    13 UIKit        0x000cd32a -[UINavigationController _startDeferredTransitionIfNeeded] + 266 
    14 UIKit        0x000d4562 -[UINavigationController pushViewController:transition:forceImmediate:] + 932 
    15 UIKit        0x000cd1c4 -[UINavigationController pushViewController:animated:] + 62 
    16 Teste Data Nav      0x00002d4c -[RootViewController tableView:didSelectRowAtIndexPath:] + 220 
    17 UIKit        0x0008bb68 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1140 
    18 UIKit        0x00081b05 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 219 
    19 Foundation       0x0079b79e __NSFireDelayedPerform + 441 
    20 CoreFoundation      0x00da38c3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19 
    21 CoreFoundation      0x00da4e74 __CFRunLoopDoTimer + 1220 
    22 CoreFoundation      0x00d012c9 __CFRunLoopRun + 1817 
    23 CoreFoundation      0x00d00840 CFRunLoopRunSpecific + 208 
    24 CoreFoundation      0x00d00761 CFRunLoopRunInMode + 97 
    25 GraphicsServices     0x00ffa1c4 GSEventRunModal + 217 
    26 GraphicsServices     0x00ffa289 GSEventRun + 115 
    27 UIKit        0x00022c93 UIApplicationMain + 1160 
    28 Teste Data Nav      0x000023b9 main + 121 
    29 Teste Data Nav      0x00002335 start + 53 
) 
terminate called throwing an exceptionCurrent language: auto; currently objective-c 
+0

Avez-vous correctement attribué UINavigationController dans IB ou ailleurs? – Vanya

+0

Je n'ai pas affecté UINavigationController ... – Leonardo

+0

puisque vous utilisez des fichiers nib, je suppose que vous devriez en avoir un défini au moins dans IB. – Vanya

Répondre

2

Fondamentalement, il ne peut pas trouver un Fichier .xib appelé "DetailView". Assurez-vous que votre initWithNibName: a le nom de chaîne correct pour le fichier .xib.

La partie importante de cette erreur est:

Could not load NIB in bundle: 'NSBundle </.../Teste Data Nav.app> (loaded)' with name 'DetailView' 

ce qui signifie qu'il n'y a pas de fichier .xib dans votre paquet appelé DetailView. Assurez-vous que vous utilisez le nom correct du fichier:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{  
    ItemDetailsView *detailViewController = [[ItemDetailsView alloc] initWithNibName:@"ItemDetailsView" bundle:nil]; 

    // ERROR HERE 
    [self.navigationController pushViewController:detailViewController animated:YES]; 
    [detailViewController release]; 
} 

Modifier (des commentaires) relient la vue sur la File's Owner comme ceci:

enter image description here


Assurez-vous que self a un parent navigationController. Si c'est la vue principale qui apparaît lorsque l'application démarre, vous devez ajouter un UINavigationController au MainWindow.xib et définir son rootViewController au contrôleur de vue avec cette table.

Vous pouvez tester ceci en faisant:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{  
    NSLog("self.navController view controllers: %@", [[[self navigationController] viewControllers] description]); 
    // Or something like this: 
    if (self.parentViewController == self.navigationController) { 
     NSLog(@"I have a nav controller dad!"); 
    } else { 
     NSLog(@"I have no nav controller!"); 
    } 
    // ItemDetailsView *detailViewController = [[ItemDetailsView alloc] initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]]; 
    // ERROR HERE 
    // [self.navigationController pushViewController:detailViewController animated:YES]; 
    // [detailViewController release]; 
} 

Si l'NSLog imprime un tableau de contrôleurs de vue, alors il y a un autre problème, mais si elle renvoie une erreur sur le NSLog ou il imprime un tableau vide, votre self n'a pas de parent navigationController.

+0

le résultat du premier journal: "2011-10-02 17: 16: 06.835 Teste Data Nav [9947: b303] Contrôleurs de vue self.navController: ( " " )" et "J'ai un nab contrôleur papa! " – Leonardo

+0

je l'ai posté sur la question ... si vous avez besoin de plus d'informations pls demander – Leonardo

+0

pas de chance ... l'erreur a quelque chose à voir avec la chaîne que je passe en paramètre? Erreur – Leonardo

1

Je ne sais pas si c'est le même problème mais j'ai eu un problème où pousser une vue explosait avec un sigabort.

Dans mon cas, j'ai eu une faute de frappe au nom de Xib avec laquelle je commençais la vue détaillée. Il peut également causer le même problème si pour une raison quelconque le Xib n'est pas bien formé. Dans les deux cas, il vous renverra un objet non nul et il ne explosera pas jusqu'à ce que vous essayiez de le pousser.

Voici ma question était sur la façon de le détecter plus tôt:

Detecting problematic XIB views earlier

En tant que test, vous pouvez également essayer de créer une autre vue trivial et pousser cela. Si cela fonctionne, vous avez réduit le problème à une faute de frappe dans le push, une faute de frappe dans le nom de la vue ou un fichier XIB mal formé.

espoir qui aide à vous mettre sur la bonne voie ...