2014-10-19 34 views
5

Uygulamam ve uzantılarım arasında kod ve kaynakları paylaşmak için, projemde bir Cocoa Touch Framework gömdüm, bu çerçeve resim ve xib dosyaları gibi bazı kaynaklar içeriyor.iOS 8: Cocoa Touch Framework'den kaynak alın

Sorum şu: Ana kaynak ve uzantılardan bu kaynaklara nasıl erişirim?

Ben bu yöntemi kullanmak kullandı: iOS 8 Extension: how to use xib inside Cocoa Touch Framework in extensions?

ama bu uygulamanın paket ve iyi bir tekrar değil uzantıları paket, tüm kaynaklara bir kopyasını yapacaktır.

Daha iyi bir yolu var mı?

Güncelleme:

Şimdi benim ana uygulama çerçevelerinde kaynağa erişmek için böyle bir kod kullanabilirsiniz:

+(NSBundle*)frameworkBundle 
{ 
    NSString *frameworkDirPath = [[NSBundle mainBundle] privateFrameworksPath]; 
    NSString *frameworkBundlePath = [frameworkDirPath stringByAppendingPathComponent:@"MyFramework.framework"]; 
    NSBundle *frameworkBundle = [NSBundle bundleWithPath:frameworkBundlePath]; 

    return frameworkBundle; 
} 

ancak bu uzantılar için çalışmaz.

cevap

15

bu deneyin:

NSBundle *frameworkBundle = [NSBundle bundleForClass:[AnyClassFromFramework class]]; 
+0

Öyle kodu daha farklı bir yol atar soruda, neden? ne kullanmalıyız – Gabox

+0

bundleForClass kullanarak grup oluşturma, yoldan oluşturmadan daha iyidir. Geliştirme sırasında bu sorunu yaşadım, test uygulamasından coredata momd dosyası aldık, bundan sonra uygulamayı bir çerçeveye dönüştürdük ve bir kaynak olarak momd ekledik. Artık momd dosyasını tüketen test uygulaması mainBundle'da arıyordu, oysa şimdi yanlış. momd dosyası çerçeve içinde taşınır. Bu yüzden her zaman bundleForClass kullanın ve kaynağı kullanarak en yakın/doğrudan sınıfı sağlayın. – Omkar

5

Bu benim için çalıştı:

NSBundle * frameworkBundle = [NSBundle bundleWithIdentifier:@"<framework-bundle-identifier>"]; 
+0

Bu yalnızca dinamik kitaplık için çalışır, statik kitaplık için nil döndürür. – njuxjy

0

hızlı için kullanmayı düşünün:

let bundle = NSBundle(forClass: self.dynamicType) 
+0

Bu sadece Swift 3+ içindir. – emrekyv