我正在使用xcode和objc创建一个简单的应用程序,我需要从文件加载NSDictionary,但我无法使用NSBundle获取该文件的路径:
NSString *l = [[NSBundle mainBundle] pathForResource:@"LoginStatuses" ofType:@"plist"];
NSLog(@"%@", l);
当我运行此代码时,我得到了这个:
2010-10-16 10:42:42.42样本[5226:a0f](null)
我不知道为什么。
我创建了一个名为Resources的组,在那里我添加了LogingStatuses.plist:
答案 0 :(得分:61)
所以这是我获得源代码后解决这个问题的方法:
我没有真正关注发布的屏幕截图,但目标是“命令行工具”类型......并且因为那些没有包{{1}当然返回nil。 Xcode并没有抱怨它无法执行“复制捆绑资源”步骤,它只是默默地跳过它。这是非常误导的。
解决方案只是添加一个类型为“ Application ”的新目标,以便生成基于bundle的应用程序。然后选中目标成员复选框,以获取此新目标的所有源和资源。然后正确解析了plist路径。
答案 1 :(得分:52)
我试图让我的iPhone应用程序使用默认的sqlite数据库,并且该应用程序无法找到它。原来我必须确保.sqlite文件在bundle资源中。
现在你的应用程序将找到这个默认的sqlite数据库。
答案 2 :(得分:22)
文件是否真的包含在目标中(因此会被复制到捆绑包中)?有两种方法可以找到/设置:
第一种方法:右键单击(或Cmd-click)文件,选择“获取信息”。然后单击“目标”选项卡,确保检查文件中是否有所需的目标。
第二种方式:在项目浏览器中右键单击(或Cmd-clock)文件浏览器的标题(它可能会显示为“Groups& Files”)。然后选择“目标会员”。现在,每个文件旁边都有一个复选框,可以是目标的成员(如.m文件或资源)。再次确保选中文件旁边的复选框。
答案 3 :(得分:5)
由于我在这里搜索过,没有找到答案,但后来我自己发现了,我会把它留在这里......
我为Retina提供了2个文件: tray.png 和 tray@2x.png 。这些文件自动添加到“复制包资源”中。
可是:
[[NSBundle mainBundle] pathForResource:@"tray" ofType:@"png"];
没有返回实际复制到捆绑包的文件!原因是:IDE创建了一个TIFF文件 tray.tiff (联合 tray.png 和 tray@2x.png ),所以{{1帮助!
答案 4 :(得分:2)
我的问题和解决方案与Dmitriy Isaev非常相似。我试图获取xib文件的路径。两个调用(在Swift中)pathForResource(“myfile”,ofType:“xib”)和pathForResource(“myfile.xib”,ofType:nil)都失败。
解决方案是使用扩展名“nib”代替:
pathForResource("myfile", ofType: "nib")
答案 5 :(得分:2)
我今天在命令行项目中遇到了这个问题。
幸运的是,解决方案很简单。只需转到" Build Phases",点击" +"并添加一个新的"复制文件"相。选择"资源"作为目标,并添加您要使用的任何文件。
现在你仍然可以使用[NSBundle mainBundle]
,它应该可以使用!
答案 6 :(得分:0)
在iPad上,文件名区分大小写。你需要使用小写字母。
答案 7 :(得分:0)
就我而言(执行XCTestCase)出于某种原因,资源存储在非主Bundle中。我通过首先检查捆绑测试类属于哪个来解决此问题:
[[NSBundle bundleForClass:[self class]] pathForResource:@"Config" ofType:@"plist"];
希望这也可以帮助其他人。
答案 8 :(得分:-1)
确保正确拼写资源的文件名。我刚刚学到了很难的方法。 :)