NSInternalInconsistencyException, motiv: Nu s-a putut încărca NIB în pachet (Programare, Ios, Obiectiv C)

James a intrebat.

Am parcurs o grămadă de răspunsuri referitoare la această problemă, dar nici unul nu pare să se refere la problema mea.

Am două vizualizări, Vizualizarea 1 are un buton. Vizualizarea 2 are un buton.

Butonul din View 1 este legat de un model segue la View 2.

Dacă fac clic pe butonul din vizualizarea 1, se deschide vizualizarea 2.

În vizualizarea 2, butonul este conectat la o IBAction care se declanșează.

[self dismissViewControllerAnimated:YES completion:nil];

care închide vizualizarea și afișează din nou vizualizarea 1 – Acum, dacă apăs din nou butonul din vizualizarea 1, obțin

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle <x/y/z/SomeApp.app> (loaded)' with name 'tvz-Io-ndz-view-rB8-bq-l6j' and directory 'Main.storyboardc''

Sunt complet pierdut cum să rezolv această problemă. Vă rog să mă ajutați!

EDIT:

  • Acest lucru se întâmplă numai atunci când dispozitivul nu are internet
  • Dacă am un al treilea ecran în lanț cu un webview care redă o imagine, dacă mă duc la acel ecran din View 2, aplicația nu se blochează.

EDIT 2:

Am încercat, de asemenea, să reconstruiesc ecranul de la zero.

Sunt complet nedumerit.

EDIT 3: Full Stacktrace

2015-01-19 09:10:58.528 SomeApp[37747:2203364] *** Terminating app due to
 uncaught exception 'NSInternalInconsistencyException', reason: 'Could not 
load NIB in bundle: 'NSBundle     
</Users/user/Library/Developer/CoreSimulator/Devices/D23C1B7C-7330-
466E-8369-762C6727B19C/data/Containers/Bundle/Application/AE67C3D3-C5AE-
4A66-91EC-54D976A4A4FC/SomeApp.app> (loaded)' with name 'tvz-Io-ndz-view-
rB8-bq-l6j' and directory 'Main.storyboardc''

*** First throw call stack:
(
    0   CoreFoundation                      0x01f64946 __exceptionPreprocess + 182
    1   libobjc.A.dylib                     0x01beda97 objc_exception_throw + 44
    2   CoreFoundation                      0x01f6486d +[NSException raise:format:] + 141
    3   UIKit                               0x008f8e06 -[UINib instantiateWithOwner:options:] + 1003
    4   UIKit                               0x0071b624 -[UIViewController _loadViewFromNibNamed:bundle:] + 270
    5   UIKit                               0x0071bdbb -[UIViewController loadView] + 295
    6   UIKit                               0x0071bfef -[UIViewController loadViewIfRequired] + 78
    7   UIKit                               0x0071c595 -[UIViewController view] + 35
    8   UIKit                               0x00d8f707 -[_UIFullscreenPresentationController _setPresentedViewController:] + 75
    9   UIKit                               0x006f1a81 -[UIPresentationController initWithPresentedViewController:presentingViewController:] + 113
    10  UIKit                               0x00729a61 -[UIViewController _presentViewController:withAnimationController:completion:] + 2102
    11  UIKit                               0x0072c5d2 __62-[UIViewController presentViewController:animated:completion:]_block_invoke + 345
    12  UIKit                               0x0072c424 -[UIViewController presentViewController:animated:completion:] + 224
    13  UIKit                               0x0072c8ea -[UIViewController presentModalViewController:animated:] + 57
    14  UIKit                               0x00bf448d -[UIStoryboardModalSegue perform] + 271
    15  UIKit                               0x00be1b49 -[UIStoryboardSegueTemplate _perform:] + 217
    16  UIKit                               0x00be1bc5 -[UIStoryboardSegueTemplate perform:] + 116
    17  UIKit                               0x006d4907 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1490
    18  UIKit                               0x006d4af7 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 285
    19  UIKit                               0x006d9df3 __38-[UITableView touchesEnded:withEvent:]_block_invoke + 43
    20  UIKit                               0x005ee0ce ___afterCACommitHandler_block_invoke + 15
    21  UIKit                               0x005ee079 _applyBlockToCFArrayCopiedToStack + 415
    22  UIKit                               0x005ede8e _afterCACommitHandler + 545
    23  CoreFoundation                      0x01e879de __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30
    24  CoreFoundation                      0x01e87920 __CFRunLoopDoObservers + 400
    25  CoreFoundation                      0x01e7d35a __CFRunLoopRun + 1226
    26  CoreFoundation                      0x01e7cbcb CFRunLoopRunSpecific + 443
    27  CoreFoundation                      0x01e7c9fb CFRunLoopRunInMode + 123
    28  GraphicsServices                    0x043d524f GSEventRunModal + 192
    29  GraphicsServices                    0x043d508c GSEventRun + 104
    30  UIKit                               0x005c48b6 UIApplicationMain + 1526
    31  SomeApp                             0x000e482d main + 141
    32  libdyld.dylib                       0x027e8ac9 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

James

Comentarii

  • Poți să arăți codul care prezintă View 2, doar pentru a fi sigur că nu se întâmplă nimic ciudat acolo? –  > Por Stonz2.
  • @Stonz2 Niciun cod scris de mână nu a fost scris, click dreapta a tras butonul către a doua vizualizare și nu există niciun cod suplimentar de gestionare a segmentelor. –  > Por James.
  • lipsește ceva în codul tău de „teardown” pentru view2, un proces pe care l-ai declanșat, dar pe care nu îl cureți corespunzător după. Poate că view2 este delegat la ceva și există un ciclu de reținere? Din experiența mea, acest lucru se va întâmpla numai dacă prima vizualizare2 nu a fost eliberată în mod corespunzător… –  > Por Jef.
  • suprascrieți dealloc în view2 și setați un punct de întrerupere. Și viewWillDisappear în cazul în care dealloc nu este niciodată apelat (sunt de sfatuire că nu este atunci când nu ajungeți la view3) –  > Por Jef.
  • Mulțumesc @Jef Voi încerca mâine când mă întorc la birou. Întrebare totuși de ce o aplicație care nu are funcții de internet se blochează doar atunci când internetul este dezactivat pe dispozitiv? (funcționează bine dacă internetul este activ pe dispozitiv) – -.  > Por James.
8 răspunsuri
Răzvan

Pot fi destul de multe motive care ar putea ridica eroarea pe care o primești.

Voi începe să enumăr câteva lucruri de verificat și soluții:

  1. Ați redenumit fișierul xib sau storyboard în afara Xcode? Dacă da, verificați peste tot unde aveți o referință la el pentru a vedea dacă există neconcordanțe. De asemenea, asigurați-vă că respectați majusculele / minusculele oriunde faceți referire la fișier, deoarece este sensibil la majuscule și minuscule.

  2. Mergeți la Interface Builder, selectați View1 ViewController > Utilities Panel > Identity Inspector > verificați dacă Custom Class corespunde clasei ViewController, dacă aveți una (fișiere .h și .m).

  3. Verificați Info.plist fișier. Dacă folosiți storyboads, ar trebui să aveți o intrare de genul Main storyboard file base name și NU Main nib file base name. Dacă folosiți nibs, atunci este invers. Verificați, de asemenea, dacă numele de bază al fișierului corespunde cu numele fișierului real.

  4. Verificați fișierul țintă Build Phases > Copy Bundle Resources și asigurați-vă că fișierul xib sau storyboard este adăugat acolo.

  5. Dacă instanțiați programul View1 ViewController și folosiți fișierul xib, verificați numele nib pentru greșeli de scriere (nu uitați, este sensibil la majuscule și minuscule). de asemenea, dacă în prezent adăugați formatul de fișier .xib la nume, eliminați extensia, deoarece nu ar trebui să fie folosită. Ceea ce vreau să spun este această linie de cod: UIViewController *controller = [[UIViewController alloc] initWithNibName:@"xibFileName" bundle:nil];

  6. Verificați proprietățile fișierului xib sau storyboard în inspectorul de fișiere și asigurați-vă că fișierul dvs. este legat de țintă în fișierul Target Membership panoul de selecție.

  7. Verificați proprietățile fișierului xib sau storyboard în inspectorul de fișiere și încercați să comutați fișierul dvs. Location la Relative to project sau Relative to group. Vedeți dacă oricare dintre cele două variante face o diferență.

  8. Dacă adăugați controlerul de vizualizare în mod programatic în fișierul initWithCoder atunci ar trebui să îl instanți în fișierul viewDidLoad în loc de metoda

  9. Dacă nimic din cele de mai sus nu se aplică situației dvs., ați putea șterge fișierul din Xcode (selectați Remove References) și să-l importați din nou în proiectul dvs.

Nu uitați să vă curățați ÎNTOTDEAUNA proiectul după ce ați făcut modificările de mai sus (SHIFT+COMMAND+K).

Vă rugăm să ne anunțați dacă a funcționat și ce a funcționat.

Comentarii

  • Aceasta este o listă fantastică de motive pentru aceasta. Nu sunt sigur cum ai evocat-o… dar mulțumiri uriașe! #6 de mai sus este ceea ce a făcut-o pentru noi. =) –  > Por Marchy.
  • Problema mea a fost că nu foloseam pachetul corect… pachet: Bundle(for: –  > Por devjme.
Rishabh Sanghvi

Am încercat toate răspunsurile de mai sus, dar nu au funcționat. Pentru mine, soluția a fost să includ xib-ul în resursa țintă.

Pași efectuați:

  • Faceți clic pe fișierul xib.
  • Deschideți Identity Inspector -> Target Membership și verificați a doua opțiune (ProjectName_Resource)

Mukund Agarwal

Este posibil să trebuiască să configurați pachetul pentru clasă înainte de a accesa xib-ul:

ObjectiveC:

//Bundle initialisation
NSBundle* bundle = [NSBundle bundleForClass:[self class]];

//Initialising the nib
UIView *nibView = [[bundle loadNibNamed:@"nibFileName" owner:self options:nil] objectAtIndex:0];

//Display the ad (this will vary based on your application setup)
[[[UIApplication sharedApplication] keyWindow] addSubview:nibView];

kpoustas

M-am confruntat cu acest lucru atunci când am extras o aplicație .app dintr-un fișier zip și am încercat să o execut, atât pe un dispozitiv iOS, cât și pe Simulator.

Unul dintre fișierele .nib fusese numit cu caractere nelatine (fileNormal.nib cu litere grecești No) și, când a fost extras din zip, i s-au atribuit litere dintr-un alt set de caractere (ar trebui să fie Greek-DOS sau ceva compatibil). Am ales un alt set de caractere la extragere și a funcționat așa cum trebuia.

Doar punând acest lucru în cazul în care altcineva se confruntă cu aceeași problemă 😉

peterdoesco.de

De asemenea, este posibil ca UITableViewDataSource sau UITableViewDelegate să nu fie implementate în UIViewController dorit

Eden

Dacă lucrați cu cocoapods, ar putea fi de ajutor și rularea pod update. Unul dintre colegii mei de echipă a schimbat un pod în jurul valorii de care a dus la această eroare, astfel încât actualizarea podului a rezolvat-o pentru mine.

Hussain Shabbir

Puteți încerca să verificați scenariile de mai jos pentru excepția de mai jos:

1) Dacă lipsește fișierul nib, atunci adăugați același lucru în Xcode dvs.

2) Puneți o verificare în interiorul metodei IBAction înainte de concediere, consultați acest lucru

user1232690

În cazul meu, exact aceeași excepție a fost cauzată de faptul că doi controlori aveau același id de storyboard (în cadrul unui storyboard)