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 的魔力让我失望了。加载文件时是否有某个阶段我丢失了?

【问题讨论】:

你能显示fileNamefileExtension 中的值吗? 有时 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 的路径时出现问题

NSBundle pathForResource 不适用于子目录本地化?