从NSBundle获得一条零路径

时间:2012-07-29 02:09:51

标签: objective-c nsbundle xcode4.4

我在项目中创建了一个新文件夹,我复制了一个图像(名为" 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) 问题是什么?

6 个答案:

答案 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的最高级别。它位于任何文件夹/子文件夹中。