从 plist 访问字符串返回 nil
Posted
技术标签:
【中文标题】从 plist 访问字符串返回 nil【英文标题】:Accessing string from plist returns nil 【发布时间】:2016-11-01 05:22:09 【问题描述】:代码如下:
NSString* filepath = [[NSBundle mainBundle]
pathForResource:@"Stones" ofType:@"plist"];
NSDictionary *stones = [NSDictionary dictionaryWithContentsOfFile:filepath];
NSArray* array = stones[@"StoneArray"];
NSDictionary* dic = array[stoneInt];
NSString* string = [[NSString alloc] init];
string = dic[[NSString stringWithFormat:@"%d", stoneInt]];
return string;
stoneInt
是一个从 0 到 59 的数字(默认情况下是 11)。
当我在 return
语句处设置断点时,stoneInt
是 11(应该是),而 string
是 nil
。我做错了什么?
另外,当我分析 dic
时,它正确地表明它正在使用密钥 11
和字符串 Maze
。
这里是plist的源代码:
<plist version="1.0">
<dict>
<key>StoneArray</key>
<array>
<dict>
<key>1</key>
<string>Ocean</string>
</dict>
<dict>
<key>2</key>
<string>Grass</string>
</dict>
这一直持续到字符串 59。我试图返回的字符串(在任何这些情况下,让我们以案例 1 为例)是“Ocean”。我的string
对象始终是nil
。
【问题讨论】:
你为什么以两种不同的方式使用两次stoneInt
?您首先将它用作array
的索引,它会为您提供字典。然后将stoneInt
转换为字符串并将其用作字典的键。这看起来很奇怪。
我知道,我最初收到一个错误,当时我只有一个字符串数组。因此,当您创建 plist 时,您会看到“项目 0、项目 1 等”,我将它们用作字符串并写了 NSString* string = array[[NSString stringWithFormat:@"%d", stoneInt]];
无论哪种方式,它仍然会导致字符串nil
除非您使用 plist 的结构更新您的问题,显示您实际尝试获得的值,否则没有人可以提供帮助。
我的编辑有帮助吗?
【参考方案1】:
抱歉,stoneInt
的值实际上比我试图访问的密钥小一。 stoneInt
是 11,但它访问的密钥被识别为 12。
【讨论】:
以上是关于从 plist 访问字符串返回 nil的主要内容,如果未能解决你的问题,请参考以下文章
向 info.plist 添加了自定义键,当我从 Swift 的游乐场访问时,它是 nil
解决pathForResource返回nil, 无法读取plist文件问题