NSBundle pathForResource 无
Posted
技术标签:
【中文标题】NSBundle pathForResource 无【英文标题】:NSBundle pathForResource nil 【发布时间】:2014-04-20 21:07:44 【问题描述】:我正在尝试加载 M4A 文件,但无法使用 NSBundle 获取文件的路径。
NSString *fileURLString = [[NSBundle mainBundle] pathForResource:fileName ofType:fileExtension];
NSURL *fileToBePlayed = [[NSURL alloc] initWithString:fileURLString];
tourAudioPlayer = [tourAudioPlayer initWithContentsOfURL:fileToBePlayed error:nil];
当我运行代码时,调试器显示 fileURLString 为 nil,因此后面的两个对象也是如此。
我已将该文件添加到 Supporting Files 目录并确认该文件包含在 Target > Build Phases 下的 Copy Bundle Resources 下。
不幸的是,在这种情况下,Clean and Build 的魔力让我失望了。加载文件时是否有某个阶段我丢失了?
【问题讨论】:
你能显示fileName
或fileExtension
中的值吗?
有时 Xcode 对添加到项目中的外部文件感到非常困惑,有时您可以通过从设备/模拟器中完全删除应用程序并重新安装来解决它。此外,如果在设备中执行此操作,您确定文件名的大小写(因为设备区分大小写)?顺便说一句,如果我想要一个 URL,我会使用 URLForResource
,以节省从路径到 URL 的操作,但显然这不是这里的问题......
检查包以查看文件是否在其中。它应该在 ~/Library/Application Support/iPhone Simulator/7.1/Applications 内。
我从模拟器中删除了该应用程序。这会影响 fileURLString 不再为空,现在指向 ~/Library/Application Support/iPhone Simulator/etc 中的包。不幸的是,NSURL 本身仍然为零。我已经确认该文件确实位于它应该在 ~/Library/Application Support/iPhone Simulator/7.1/Applications 中的位置。文件名是“dholaks”,文件扩展名是“m4a”。
【参考方案1】:
试试这个....
- (void)viewDidLoad
[super viewDidLoad];
NSURL *vedioURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:FileName ofType:FileType]];
MPMoviePlayerViewController *videoPlayerView = [[MPMoviePlayerViewController alloc] initWithContentURL:vedioURL];
[self presentMoviePlayerViewControllerAnimated:videoPlayerView];
[videoPlayerView.moviePlayer play];
【讨论】:
【参考方案2】:我已经解决了这个问题,结果证明这是两个愚蠢的问题。
第一个问题是我使用的是 initWithString: 而不是 fileURLWithPath:。我懒惰地阅读文档。
第二个问题仅仅是令人尴尬的疏忽。提供的代码 sn-p 表示 AVAudioPlayer 的初始创建,因此我在堆上为其分配空间。
进行上述更改已解决问题。感谢所有提供建议和支持的人。
【讨论】:
以上是关于NSBundle pathForResource 无的主要内容,如果未能解决你的问题,请参考以下文章
NSBundle pathForResource is NULL 取不到值
使用 [NSBundle mainBundle] pathForResource: ofType:inDirectory: 访问文件
NSBundle pathForResource 返回 nil 和子目录
iOS:[NSBundle pathForResource:ofType:inDirectory] 返回 nil?
使用 [[NSBundle mainBundle] pathForResource 获取 .plist 的路径时出现问题