使用 [NSBundle mainBundle] pathForResource: ofType:inDirectory: 访问文件
Posted
技术标签:
【中文标题】使用 [NSBundle mainBundle] pathForResource: ofType:inDirectory: 访问文件【英文标题】:accessing a file using [NSBundle mainBundle] pathForResource: ofType:inDirectory: 【发布时间】:2011-09-09 22:26:22 【问题描述】:我在名为TextFiles
的文件夹中添加了一个文件paylines.txt
,该文件位于Xcode 中我的ios 项目的Resources
文件夹中。
这是我用来访问文件的代码:
NSString* filePath = [[NSBundle mainBundle] pathForResource:@"paylines" ofType:@"txt" inDirectory:@"TextFiles"];
NSLog(@"\n\nthe string %@",filePath);
代码打印:
2011-06-07 14:47:16.251 slots2[708:207]
the string (null)
【问题讨论】:
【参考方案1】:我也遇到了同样的问题。 我找到的解决方案是(在 xcode 4.x 中):
转到:目标 -> “构建阶段” -> “复制捆绑资源” 然后在此处添加该特定文件。 如果该文件已添加,请将其删除并重新添加。
清理项目并运行。它有效。 :)
【讨论】:
对我来说文件在那里,所以我删除它并再次添加它,清理并且它工作! 就我而言,不知何故,我的应用程序的“添加到目标”复选框未选中;直到我删除文件然后再次添加它才意识到这一点。糟糕! 强调来自其他人和其他类似答案的 cmets:有时您这样做是正确的,但它仍然不起作用。如果是这样,请确保从该项目窗格(BuildPhases/Bundle Resources)中的包中删除该文件,然后重新添加它。然后项目>清洁。这终于对我有用了! 是的,还必须删除它并重新添加才能使其正常工作。谢谢。【参考方案2】:我发现我犯的错误是我在项目中添加了一个组,而不是添加更多的真实目录instructions
【讨论】:
是的,正如链接中所说:在弹出窗口中,确保选择“为任何添加的文件夹创建文件夹引用”而不是“为任何添加的文件夹创建组”【参考方案3】:当我将文件拖入时,默认情况下“添加到目标”框似乎未选中。如果我不勾选它,那么我已经描述了问题。通过删除文件然后将它们拖回来修复它,但请确保勾选“添加到目标”。
【讨论】:
【参考方案4】:试试这个,它对我有用。
NSString *str = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"paylines.txt"];
模拟器用
NSURL *rtfUrl = [[NSBundle mainBundle] URLForResource:@"paylines" withExtension:@".txt"];
【讨论】:
【参考方案5】:您需要做的就是确保选中下面显示的复选框。
【讨论】:
【参考方案6】:您是否正在尝试在 XCTest 中执行此操作,并且即将砸坏您的笔记本电脑?这是给你的主题:Why can't code inside unit tests find bundle resources?
【讨论】:
【参考方案7】:转到“Target”->“Build Phases”,选择您的目标,选择“Build Phases”选项卡,单击“Add Build Phase”,然后选择“Add Copy Files”。将目的地更改为“产品目录”。将您的文件拖到“添加文件”部分。
【讨论】:
如果您还可以告诉我我做了什么以将此文件从复制文件列表中删除,我将不胜感激【参考方案8】:如果是 Mac OSX,
转到目标 -> 构建阶段 单击 + 复制新文件构建阶段 选择产品目录并将文件放在那里。
清理并运行项目。
【讨论】:
【参考方案9】:在遵循@Neelam Verma 的答案或@dawid 的答案后,其最终结果与@Neelam Verma 的答案相同,不同之处在于@dawid 的答案从将文件拖放到Xcode 项目和@Neelam Verma 的答案开始从已经是 Xcode 项目一部分的文件开始,我仍然无法通过 NSBundle.mainBundle().pathForResource("file-title", ofType:"type")
找到我的视频文件。
我想可能是因为我的文件位于 Xcode 项目中嵌套的组中,这就是原因,所以我将视频文件移动到 Xcode 项目的根目录,仍然没有运气,这是我的代码:
guard let path = NSBundle.mainBundle().pathForResource("testVid1", ofType:"mp4") else
print("Invalid video path")
return
最初,这是我的文件名:testVid1.MP4
,将视频文件重命名为 testVid1.mp4
解决了我的问题,因此,至少 ofType
字符串参数区分大小写。
【讨论】:
【参考方案10】:选择项目/特定文件夹 --> 右键单击 --> 将文件添加到项目 --> 选择要添加的文件。
这对我有用。
【讨论】:
以上是关于使用 [NSBundle mainBundle] pathForResource: ofType:inDirectory: 访问文件的主要内容,如果未能解决你的问题,请参考以下文章
使用来自 [[NSBundle mainBundle] resourcePath] 的路径
使用 [NSBundle mainBundle] pathForResource: ofType:inDirectory: 访问文件
无法使用 [[NSBundle mainBundle] pathForResource ofType inDirectory] 加载文件