2014-09-12 192 views
13

我想將圖片資源包含在cocoapod庫中,但我無法訪問它們。我讀過這些資源的幫助:pod中的訪問資源

Cocoapods Resources

Cocoapods Resource Bundles

Mokacoding Resource Bundles

David Potter Resource Bundles

然而,沒有點我在訪問資源的方向。我已經試過如下:

[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle bundleWithIdentifier:@"Assets"] URLForResource:@"[email protected]" withExtension:@"png"]]] 
[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle bundleWithIdentifier:@"Assets"] URLForResource:@"my-image" withExtension:@"png"]]] 
[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle bundleWithIdentifier:@"Assets.bundle"] URLForResource:@"my-image" withExtension:@"png"]]] 
[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle mainBundle] URLForResource:@"my-image" withExtension:@"png"]]] 
[[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle mainBundle] URLForResource:@"[email protected]" withExtension:@"png"]]] 
[UIImage imageNamed:@"my-asset"] 
[UIImage imageNamed:@"[email protected]"] 

但他們沒有工作。

我設置我的podspec這些替代品和上述既不工作:

s.resources = ['Pod/Assets/*.{png, jpg}', 'Pod/Assets/**/*.{png, jpg}'] 
s.resource_bundles = { 
    'Assets' => ['Pod/Assets/*.{png, jpg}', 'Pod/Assets/**/*.{png, jpg}'] 
} 

資源出現在「發展豆莢/我的應用程序/資源」一pod update後,但我不能訪問它們爲了我的生活。沒有任何捆綁,並且沒有任何名爲「資產」的東西。

任何幫助或指導,將不勝感激。

+0

你兩者都做's.resources'和's.resource_bundles'或單獨審判呢?也許有一些衝突。 – 2014-09-14 07:42:20

+0

@NiklasBerglund分別。 – RileyE 2014-09-14 21:21:42

回答

5

這也絆住了我。也許我誤解+bundleWithIdentifier:,但我不認爲你可以使用它來獲取iOS應用程序包內的資源包。有關更多詳細信息,請參閱軟件包文檔的"Getting Bundles by Identifier"部分。

什麼工作是+bundleWithPath:,例如:

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"MyResourceBundle" ofType:@"bundle"]; 
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 

我包裹dispatch_once塊裏面並調用它任何時候我需要訪問這個包。

我在我的podspec中也使用s.resource_bundles語法,並且它可以正常工作。

9

這取決於您使用的Cocoapods版本。 pathForResource:ofType:與舊版本的CocoaPods的,你可以使用[一個NSBundle mainBundle]脫身

NSString *bundlePath = [[NSBundle mainBundle] 
    pathForResource:@"MyResourceBundle" ofType:@"bundle"]; 
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 

如果您正在使用新的CocoaPods和使用spec.resource_bundles代替spec.resources在podspec文件,你必須避免mainBundle和替換它與一個NSBundle bundleForClass,其中 「Returns the NSBundle object with which the specified class is associated

例子:

NSString *bundlePath = [[NSBundle bundleForClass:[MyFrameworkClass class]] 
    pathForResource:@"MyResourceBundle" ofType:@"bundle"]; 
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 
+0

謝謝 - 我會研究這個 – RileyE 2015-08-31 17:30:47

+0

作爲一個擴展,我發現這不適用於從位於Cocapod中的資產目錄加載圖像。更多信息在這裏:http://stackoverflow.com/a/23903860/235290我證實了這一點與我的同事們也證實,沒有已知的方式做到這一點。所以你必須使用獨立的圖像文件而不是資產目錄。 – Hugh 2015-10-06 20:22:39