3

我在我的项目中创建了一个新文件夹,我在其中复制了一个图像(称为“io.jpg”)。
我还检查了构建阶段-> 复制捆绑资源并且文件在那里。
所以我正在尝试获取此图像的路径:

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

但它打印(空),我也尝试过这种方式:

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

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

4

6 回答 6

6

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

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

于 2013-08-31T10:22:09.253 回答
3

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

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

(还请记住,文件名区分大小写。)

为了澄清,您应该查看~/Library/Developer/Xcode/DerviedData/Project-{GUID}/Build/Products. 您的图像将丢失。

于 2012-07-29T02:14:39.193 回答
3

我的猜测是,假设您说您在 Xcode 项目中创建了一个新文件夹,那么您已经创建了一个蓝色文件夹引用,并且您的图像资源位于 bundle 的子目录中。

我愿意打赌这不是 NSBundle 的错误,因为这个类对 Foundation 框架来说是多么古老和重要。

尝试使用更具体的实例方法访问您的资源

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

我猜你创建的文件夹引用subpath的名称在哪里。

于 2012-08-01T02:13:44.157 回答
0

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

“在 Xcode 项目导航器(左侧)中选择文件,并确保在文件检查器(右侧)的“目标成员资格”下检查了您的目标。——还要仔细检查文件名的拼写——蒙迪”

于 2012-07-30T06:01:38.987 回答
0

如果您只是想获得图像,那么所有这些都有些矫枉过正。假设您已包含bundleImage.PNG在您的应用程序包中......某处,不知何故......</p>

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
于 2012-08-01T01:53:45.623 回答
0

尝试从您的应用程序中删除图像。然后再次添加它。并在运行之前清理您的构建。看看它是否有帮助。否则,请提供项目导航器的屏幕截图,显示图像添加的位置。它必须在顶层您的 Application.app.Is 它在任何文件夹/子文件夹中的某个位置。

于 2012-08-06T07:32:58.373 回答