2012-07-29 112 views
3

我在我的项目中创建了一个新文件夹,其中复制了一个图像(称为“io.jpg”)。
我也检查了构建阶段 - >复制束资源和文件在那里。
所以我试图让这个图片的路径:从NSBundle获取无路径

NSBundle* bundle=[NSBundle mainBundle]; 
NSString* path=[bundle pathForResource: @"io" ofType: @"jpg"]; 
NSLog(@"%@",path); 

但它打印(空),我也试过这样:

NSBundle* bundle=[NSBundle mainBundle]; 
NSString* path=[bundle pathForImageResource: @"io"]; 
NSLog(@"%@",path); 

但它仍然打印(空)。
有什么问题?

+0

你看过的实际建成的产品,以确保文件被正确复制? – jtbandes 2012-07-29 02:13:45

+0

是的,该文件在应用程序目录中。 – 2012-07-29 11:23:05

+0

可能重复的[资源路径不工作Xcode](http://stackoverflow.com/questions/11447010/resourcepath-not-working-xcode) – trojanfoe 2012-07-30 06:58:43

回答

3

我的猜测,鉴于你说你在你的Xcode项目中创建了一个新的文件夹是你创建了一个蓝色文件夹引用,并且你的图像资源位于你的包的子目录中。

我敢打赌,这不是一个错误与NSBundle,考虑到这个类对基础框架有多老和严重。

尝试和使用更具体的实例方法

- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension inDirectory:(NSString *)subpath 

其中subpath文件夹参考我猜你创建的名称来访问你的资源。

3

如果您请求的资源不存在于输出中(或不存在于应该出现的位置),您将得到一个零路径。这是我见过的唯一原因。

忘记证明它应该存在,只是检查输出以确保它确实存在。

(也请记住,文件名是区分大小写的。)

为了澄清,你应该在~/Library/Developer/Xcode/DerviedData/Project-{GUID}/Build/Products寻找在输出束。您的图片将会丢失。

+0

图像在那里,我也尝试打印包的路径,并进入它的目录,我注意到在内容 - >资源下有图像“io.jpg”。 – 2012-07-29 12:20:54

+1

它应该位于YourApplication.app的顶层,而不是在Resources子目录中。 – 2012-08-01 03:32:38

+0

@StevenFisher我正在使用Xcode 6 - 我在哪里可以看到资源文件?它们不在产品或Debug-iphonesimulator中。 – moonman239 2015-07-28 18:10:32

0

几周前我有这样的问题。事实证明,我只是没有勾选一个框。这是我问我时得到的答案。

“在Xcode项目浏览器中选择文件(在左边),并确保您的目标在文件检查器中的”目标成员“下(右侧)被选中 - 同时再次检查拼写的文件名 - 蒙迪“

+0

所以这个问题是这个问题的重复? – trojanfoe 2012-07-30 06:57:55

+0

是的。如果忘记选中该框,该文件实际上不在应用程序的包中。 – 2012-07-30 07:35:46

+0

那个盒子已经被切割了,这不是问题。 – 2012-07-30 11:20:28

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 
+0

假设'DummyClass'也在包/框架中作为您正在寻找的图像资源。 – Jessedc 2012-08-01 02:10:05

+0

@Jessedc不,我只在'@interface NSImage(MyCategory)'之前包含'@interface DummyClass',然后我可以在任何继承'#import''类的地方使用它。 – 2012-08-01 02:14:37

0

尝试从您的应用程序中删除图像,然后再次添加它。并在运行之前清理您的版本。请参阅是否有帮助。否则,请给出项目导航器的截图,以显示图像添加的位置。它必须是在你的Application.app的最高级别。它是任何文件夹/子文件夹内的任何地方。

5

转至:目标 - >“构建阶段” - >“复制束资源”然后在此处添加该特定文件。

清理项目并运行。有用。 :)