2016-03-11 23 views
6

Bunu anlamak için yarım günümü kaybettim ve çevrimiçi olarak doğrudan doğru bir çözüm göremiyorum.Çerçeve projesi içinde .xib dosyası nereye yerleştirilir?

iOS CocoaTouch Framework oluşturdum. İçinde özel ve kamu dersleri var ve her şey yolunda. Ben bu çerçeve içindeki .xib dosyasını eklerken sorun olduğunu.

*** 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'' 

Ben .xib dosyalar statik kütüphane içinde bulunan edilemez olduğunu duydum ama onlar gerektiğini düşünüyorum: Ben .xib dosyası ve ben alıyorum hatayı örneğini istiyorum benim çerçevesi içinde

olduğunu çerçeve içerisinde kullanılabilir.

Çerçeve hedefim daha önce "Bundle Kaynakları Kopyala" içeriyor ve bunu .xib dosyası, framework projesinde oluşturduğumda otomatik olarak ekledi.

enter image description here

Ben kaynaklar ayrı eklenmelidir birkaç yerde okudum. hedef hedef ancak yeni hedefler oluştururken "paket" seçeneği yok ve bunun eski statik kitaplık günlerini oluşturduğuna inanıyorum.

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

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

Ben daha metot çağrıları içine bu kırmaya çalıştı ve Nib kendisi yaratılmış oluyor düşündüm:

Bu

I (framework içinde) görüşümü başlatmak için kullanıyorum kodudur

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

Artık fikirlerim yok. Temiz, türetilmiş verileri silme projesi ile denedim, ancak işi görmüyorlar.

Burada bir şey mi özlüyorum?

+0

Neyi yanlış yaptığınızı bilmiyorum, böylece indirip inceleyebileceğiniz bir örnek proje oluşturdum. Swift dilinde yazılmış, ama bu çok fazla bir şey yapmamalıydı. çok az kod olduğu gibi. :) https://github.com/mattneub/FrameworkWithNib – matt

+0

Kodunuzla benimki arasındaki tek açık fark, bu ipucunu, çerçeve kodunun içinden değil, ana koddan yükledim, fakat bu sadece bir kazaydı; Fark yaratmıyor. Ben sadece yeniden yazdım ki, ipucunu çerçeve kodundan yükledim ve gayet iyi çalışıyor. – matt

+0

@matt Her şeyi siler ve taze .xib oluşturacağım. Xcode, önbelleğe alınmış ayarlarla bir yere karışmış olabilir. Teşekkür ederim. – vale4674

cevap

5

iOS Projesinde Bir Çerçeveye Nib Dosyaları Nerede Yer Verilir? Benim cevap

Arka plan: Bazı UITableView ilgili uygulama ihraç etmeye çalışıyordum ve o dolu UITableViewCell.xib dosyaları vardı
. Ve sonunda .nib dosyalarına dönüşüyorlar!

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

Açıklama:
Ama burada yanlış is yapmış bir baktım statik Kakao Dokunmatik Framework oluşturmak ve içinde onu kullanmayı deneyin aşağıdaki gibi ;-) Ve o Nib dosyalarına atıfta bulundu başka bir uygulama. Yani çalışma zamanında MainBundle ne olurdu? Kesinlikle benim UITableView uygulaması App ana paketi içinde customCellID için Nib dosyası bulmaya çalışıyor.

Cevap: aşağıdaki gibi
Yani benim UITableView uygulanması en yukarıdaki kod parçacığını değişmiş:

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]; 
    } 

Ve ben UITableView uygulamasının dışına inşa çerçeve bir daha yukarıdaki hatayı vermedi! :-)

Bu cevabın dışarıda birine yardımcı olabileceğini umuyorum!

Şerefe! :-)

+0

teşekkürler, bizim için çalıştı – meronix

+2

Nereden frameworkBundleId olsun? – gangelo