从 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(应该是),而 stringnil。我做错了什么?

另外,当我分析 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

如何从返回的 plist 数组中获取字符串

解决pathForResource返回nil, 无法读取plist文件问题

`NSBundle.mainBundle().URLForResource` 总是返回 `nil`

快速从字符串转换为日期返回 nil

HTTP POST 请求返回尝试从 objects[0] 插入 nil 对象?