我在项目中创建了一个新文件夹,我复制了一个图像(名为" io.jpg")。 我还检查了构建阶段 - >复制捆绑资源,文件就在那里 所以我试图找到这张图片的路径:
NSBundle* bundle=[NSBundle mainBundle];
NSString* path=[bundle pathForResource: @"io" ofType: @"jpg"];
NSLog(@"%@",path);
但它打印(null),我也尝试过这种方式:
NSBundle* bundle=[NSBundle mainBundle];
NSString* path=[bundle pathForImageResource: @"io"];
NSLog(@"%@",path);
但它仍然打印(null) 问题是什么?
答案 0 :(得分:5)
转到:目标 - > “构建阶段” - > “copy bundle Resources”然后在这里添加该特定文件。
清理项目并运行。有用。 :)
答案 1 :(得分:3)
如果您请求的资源在输出中不存在(或者不存在于应该存在的位置),您将获得nil路径。这才是我见过的唯一原因。
忘记证明它应该存在,并检查输出以确保它确实存在。
(还要记住,文件名区分大小写。)
为了澄清,您应该查看~/Library/Developer/Xcode/DerviedData/Project-{GUID}/Build/Products
中的输出包。你的形象将会丢失。
答案 2 :(得分:3)
我的猜测,假设您说您在Xcode项目中创建了一个新的文件夹,那就是您创建了一个蓝色文件夹引用,并且您的图像资源位于您的包的子目录中。
我愿意打赌这不是NSBundle的错误,因为这个类对于Foundation框架有多大和多重。
使用更具体的实例方法
尝试并访问您的资源- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension inDirectory:(NSString *)subpath
其中subpath
是文件夹参考的名称,我猜你是在创建的。
答案 3 :(得分:0)
“在Xcode项目导航器中选择文件(在左侧)并确保在文件检查器(右侧)中的”目标成员资格“下检查目标。 - 同时仔细检查拼写文件名 - Mundi“
答案 4 :(得分:0)
如果您只是想获取图像,那么所有这些都是有点矫枉过正。假设您已将bundleImage.PNG
包含在应用程序包中..某处,某种程度上......
NSImage *image = [NSImage imageNamed:@"bundleImage"];
肯定会......找到它...如果它在那里......不能变得更简单,对吗?
如果 - 处于关闭状态 - 这是一个稍微复杂的情况,比如图像在可加载的包或框架中 - 您可以使用类似于以下的代码(NSImage上的类类别)这也将返回资源。
+ (id) imageInFrameworkWithFileName:(NSString *) fileName {
NSBundle *b = [NSBundle bundleForClass: [DummyClass class]];
return [self imageWithFileName: fileName inBundle: b];
}
说实话,我真的不明白这个“虚拟课”的概念,或者这个概念是如何工作的......但这就是它的样子
@interface DummyClass : NSObject
@end
@implementation DummyClass
@end
答案 5 :(得分:0)
尝试从您的应用中删除图片。然后重新添加它。并在运行之前清理您的构建。请参阅它是否有帮助。否则请提供项目导航器的屏幕截图,显示添加的图像的位置。它必须在Application.app的最高级别。它位于任何文件夹/子文件夹中。