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.
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?
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
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
@matt Zamierzam usunąć wszystko i utworzyć nowy .xib. Możliwe, że Xcode zostało pogrzebane gdzieś z buforowanymi ustawieniami. Dziękuję Ci. – vale4674