pathForResource ofType 返回 nil
Posted
技术标签:
【中文标题】pathForResource ofType 返回 nil【英文标题】:pathForResource ofType returns nil 【发布时间】:2014-02-24 21:34:13 【问题描述】:这是我正在使用的代码。
NSString* path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"plist"];
if(path == nil)
NSLog(@"file not found");
当我运行它时,它会打印在控制台中找不到的文件。
我的 file.plist 位于我的可可项目的支持文件夹中。 mainBundle 在哪里查找文件。这让我很困惑。我知道它会查找 .app 文件,但是在开发应用程序时 mainBundle 会在哪里查找?
【问题讨论】:
【参考方案1】:pathForResource:ofType:
仅在 Resources
文件夹(和本地化文件夹)中查找。如果要将文件放入捆绑包中的专用文件夹,则需要使用 pathForResource:ofType:inDirectory:
并提供目录名称。
【讨论】:
我厌倦了使用 inDirectory 路径和项目内部文件的本地路径,如下所示: NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"plist" inDirectory :@"/Users/joshuablevins/Documents/Xcode/Tutorials/plist tut/plist tut"];但它仍然说找不到文件。inDirectory:
您只需传递捆绑包中的文件夹名称(支持文件的文件夹名称),而不是完整路径。这应该是您在复制项目构建阶段设置的文件夹名称
如果你有一个文件的完整显式路径,那么它通常不在你的包中并且你不使用 NSBundle 来访问它
应该是拷贝文件还是拷贝bundle资源构建阶段?
复制文件(因为它允许您设置要复制到的文件夹名称)。复制捆绑资源将所有内容放在Resources
文件夹中【参考方案2】:
如果您找到的NSBundle
是您想要的:
NSBundle *yourTargetBundle = [NSBundle mainBundle];
or
NSBundle *yourTargetBundle = [NSBundle bundleWithURL:[[NSBundle mainBundle]
URLForResource:@"YourCustomBundleName" withExtension:@"bundle"]];
并得到nil结果使用函数:pathForResource: ofType:
。然后就可以登录yourTargetBundle
下资源的paths
了:
// Given that your resource type is .png and have no sub dir
NSArray *resoursePaths = [yourTargetBundle pathsForResourcesOfType:@"png" inDirectory:nil];
NSLog(@"resoursePaths == %@",resoursePaths);
它将记录所有png
类型的资源路径。可以获取image
对象使用:
targetImg = [[UIImage alloc] initWithContentsOfFile:@"OnePngPathYouChose"];
我认为上述方法是解决return nil
情况的一种方法。
【讨论】:
以上是关于pathForResource ofType 返回 nil的主要内容,如果未能解决你的问题,请参考以下文章
NSBundle pathForResource:ofType: 偶尔会为一个资源返回 nil
-[NSBundle pathForResource:ofType:inDirectory:] 为本地化资源返回 nil
iOS学习之旅7 NSBundle的pathForResource:ofType: 返回值为nil问题
使用 [NSBundle mainBundle] pathForResource: ofType:inDirectory: 访问文件
有人让 [[NSBundle mainBundle] pathForResource:ofType:inDirectory] 递归工作吗?