2016-03-11 20 views
6

Przegrałem pół dnia, zastanawiając się nad tym i nie widzę prostego rozwiązania online.Gdzie umieścić plik .xib wewnątrz projektu ramowego?

Stworzyłem framework CocoaTouch na iOS. Mam w nim zajęcia prywatne i publiczne i wszystko działa dobrze. problemem jest kiedy dodać .xib plik wewnątrz tych ram.

Wewnątrz mojego ram chcę instancję plik .xib i błąd otrzymuję to:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/dino/Library/Developer/CoreSimulator/Devices/FEDECDC2-D4EA-441E-B53B-329A5B3DFB7A/data/Containers/Bundle/Application/78CEC01F-4C36-4143-A7D6-DDE6CCAC801B/MyApp.app> (loaded)' with name 'NUInAppMessageView'' 

Słyszałem, że pliki .xib nie może być zawarty wewnątrz biblioteki statycznej ale myślę, że powinny one być można go używać w ramach.

Moja ramka docelowa zawiera "Kopiuj zasoby pakietu" z poprzedniej wersji, a plik .xib został automatycznie dodany po utworzeniu go wewnątrz projektu ramowego.

enter image description here

czytałem na kilku miejscach, że środki powinny być dodawane w oddzielnym. pakiet docelowy, ale nie ma opcji "pakowania" podczas tworzenia nowych celów i uważam, że jest to forma starych statycznych-bibliotek-dni.

Jest to kod używam zainicjować mój pogląd (wewnątrz ramy):

NSBundle * frameworkBundle = [NSBundle bundleForClass:[self class]]; // fine (not nil) 

NUInAppMessageView *view = [[frameworkBundle loadNibNamed:@"NUInAppMessageView" owner:self options:nil] firstObject]; // <-- CRASH 

Próbowałem złamać to w bardziej wywołań metod i zorientowaliśmy się, że sama stalówki tworzony jest uzyskiwanie:

UINib *nib = [UINib nibWithNibName:@"NUInAppMessageView" 
           bundle:frameworkBundle]; // fine (not nil) 
NSArray *objects = [nib instantiateWithOwner:self options:nil]; // <-- CRASH 

Nie mam już pomysłów. Próbowałem z projektem Clean, usuwanie danych pochodnych, ale nie wydają się wykonywać zadania.

Czy tu czegoś brakuje?

+0

Nie mam pojęcia, co robisz źle, więc stworzyłem przykładowy projekt, który możesz pobrać i zbadać. Jest napisany w języku Swift, ale nie powinno to mieć większego znaczenia, szczególnie. ponieważ jest bardzo mało kodu. :) https://github.com/mattneub/FrameworkWithNib – matt

+0

Jedyną oczywistą różnicą między twoim kodem a moim jest to, że załadowałem tę stalówkę z głównego kodu, nie z wewnątrz kodu, ale to był tylko wypadek; to nie robi różnicy. Po prostu przepisałem go, aby załadować stalówkę z kodu szkieletowego i działa to dobrze. – matt

+0

@matt Zamierzam usunąć wszystko i utworzyć nowy .xib. Możliwe, że Xcode zostało pogrzebane gdzieś z buforowanymi ustawieniami. Dziękuję Ci. – vale4674

Odpowiedz

5

Gdzie umieścić pliki stalówki w ramach w projekcie iOS?

Tło moją odpowiedź:
Próbowałem eksportować pewne UITableView związanych z wdrażaniem i miał UITableViewCell.xib pliki spakowane z nim. I na końcu zmieniają się w pliki .nib! ;-) A ja odnoszę się do tych plików stalówka następująco:

[[NSBundle mainBundle] loadNibNamed:customCellID owner:nil options:nil]; 

Objaśnienie:
Ale tutaj coś zrobiłem źle jest, jak zbudować statycznych Cocoa Framework dotknąć i spróbować ją wykorzystać w ciągu inna aplikacja. Więc w czasie wykonywania, co stałoby się MainBundle? Zdecydowanie moja implementacja UITableView próbuje znaleźć plik Nib dla customCellID w głównym pakiecie aplikacji.

Odpowiedź:
Więc zmienił mojego UITableView Wdrożenie Kod powyżej fragment następująco:

NSString *frameworkBundleId = @"com.randika.MyFrameworkBundleIDHere"; 
    NSBundle *resourcesBundle = [NSBundle bundleWithIdentifier:frameworkBundleId]; 

    customCell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:customCellID]; 
    if (customCell == nil) { 
     NSArray *nibs = [resourcesBundle loadNibNamed:emptyCellID owner:nil options:nil]; 
     customCell = [nibs objectAtIndex:0]; 
    } 

i ramy I zbudowany z mojego realizacji UITableView nie kiedykolwiek ponownie dać powyższy błąd! :-)

Mam nadzieję, że ta odpowiedź może być pomocna dla kogoś tam!

Pozdrawiam! :-)

+0

dziękuję, zadziałało dla nas – meronix

+2

Skąd wziąłeś frameworkBundleId od? – gangelo

Powiązane problemy