我想在cocoapod库中包含图片资源,但我无法访问它们。我已经阅读了这些资源以寻求帮助:
然而,没有人指出我访问资源的方向。我尝试过以下方法:
[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle bundleWithIdentifier:@"Assets"] URLForResource:@"my-image@2x" 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:@"my-image@2x" withExtension:@"png"]]]
[UIImage imageNamed:@"my-asset"]
[UIImage imageNamed:@"my-asset@2x.png"]
但它们都不起作用。
我已经使用这些替代方案设置了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 :(得分:9)
这取决于您使用的Cocoapods的版本。使用旧版本的cocoapods,你可以使用[NSBundle mainBundle]:pathForResource:ofType:
NSString *bundlePath = [[NSBundle mainBundle]
pathForResource:@"MyResourceBundle" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
如果您在podspec文件中使用较新的Cocoapods并使用spec.resource_bundles而不是spec.resources,则必须避免使用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];
答案 1 :(得分: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
语法,这可以正常使用。