- [NSDictionary dictionaryWithContentsOfFile]在iPad上返回nil;在模拟器中返回字典

时间:2013-10-30 14:50:23

标签: ios objective-c ipad

我有一个方法:

#define ROOT_ASSETS_PATH @"/assets/"

...

-(NSMutableDictionary*) getContentsOfPlist{
    NSString *pageContentPlistPath = [[[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent: ROOT_ASSETS_PATH] stringByAppendingPathComponent:@"content.plist"];

    NSMutableDictionary *mDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:pageContentPlistPath];
    return mDicitonary;
}

在模拟器上。这会返回一个字典。在iPad上,它返回零。确保扩展案例与调用中的案例相匹配。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

这个问题毕竟是个案。文件名的大小写与我放入参数的情况不符。 OSX并不关心,但iPad确实如此。

答案 1 :(得分:0)

尝试删除#define中的斜杠。 stringByAppendingPathComponent将为您添加斜杠。不知道为什么这会在模拟器中起作用。

答案 2 :(得分:0)

最好使用:

[NSPropertyListSerialization propertyListWithData:options:format:error:]

而不是直接NSDictionary初始化。如果某些事情失败了,它应该为你返回一个很好的错误。

答案 3 :(得分:0)

+ (id)dictionaryWithContentsOfFile:(NSString *)path
  

<强>参数

     

路径

     

完整或相对路径名。路径标识的文件必须包含   属性列表的字符串表示形式,其根对象是a   字典。

     

返回值

     

包含路径字典的新字典,如果存在,则为nil   是文件错误或文件内容无效   字典的表示。

因此,您必须设置文件的完整路径(或适当的相对路径)

另请注意,应用程序包在Simulator上是可读写的,但在设备上是只读的。