0

我有一个方法:

#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 上,它返回 nil。确保扩展案例也与呼叫中的案例相匹配。

有任何想法吗?

4

4 回答 4

2

问题毕竟是个案。文件名的大小写与我在参数中输入的大小写不匹配。OSX 不在乎,但 iPad 会。

于 2013-10-30T15:09:52.303 回答
0

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

于 2013-10-30T14:54:09.067 回答
0

使用以下方法也是个好主意:

[NSPropertyListSerialization propertyListWithData:options:format:error:]

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

于 2013-10-30T14:56:51.360 回答
0
+ (id)dictionaryWithContentsOfFile:(NSString *)path

参数

小路

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

返回值

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

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

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

于 2013-10-30T14:56:58.260 回答