访问 Plist 数组/节点 - 目标 C [重复]

Posted

技术标签:

【中文标题】访问 Plist 数组/节点 - 目标 C [重复]【英文标题】:Accessing Plist Arrays / Nodes - Objective C [duplicate] 【发布时间】:2012-08-23 18:52:33 【问题描述】:

我有一个用于存储问题和答案数据的属性列表文件。在这个文件中,我有一组数组,在这些数组中我存储了不同的类别和问题。但是我似乎无法访问这些数据?

属性文件;

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Category1</key>
<array>
    <array>
        <string>Question1</string>
        <string>Answer1</string>
    </array>
    <array>
        <string>Question2</string>
        <string>Answer2</string>
    </array>
    <array>
        <string>Question3</string>
        <string>Answer3</string>
    </array>
    <array>
        <string>Question4</string>
        <string>Answer4</string>
    </array>
</array>
</dict>
</plist>

下面我使用两个简单的按钮来访问属性列表文件;

-(IBAction)nextleft 
    [self bingsound];
    if (questionCounter > 1) 
        questionCounter -= 1;
    
    [self nextQuestion];


-(IBAction)nextright 
    [self bingsound];
     if (questionCounter < 20) 
         questionCounter += 1;
     
     [self nextQuestion];


-(void)nextQuestion 
    NSArray *pair;
    pair = [categories objectAtIndex:questionCounter];
    plistQuestion = [pair objectAtIndex:0];
    plistAnswer = [pair objectAtIndex:1];
    abbreviation.text = plistQuestion;

我正在按如下方式填充类别数组;

categories = [NSArray arrayWithContentsOfFile:@"questions.plist"];

【问题讨论】:

你能在文本编辑器中打开你的属性列表,然后张贴开头的行吗?该屏幕截图看起来不正确,第一个条目应称为“Root”,通常无法通过 plist 编辑器进行编辑。您将无效的属性列表或字典作为根对象 - 在调试器中,检查您的类别数组初始化为什么。 刚刚添加的,现在给大家看看。 【参考方案1】:

您的属性列表有一个字典作为根对象,而不是一个数组。

从顶部删除这些行:

<dict>
<key>Category1</key>

还有这一行:

</dict>

另外,请遵循@murat 的建议并导出正确的文件路径,而不是纯字符串。

一般而言,对于此类问题,调试器是您的朋友。在您的方法中放置一个断点,并在每个阶段(导出路径、提取数组)检查您得到的值。

【讨论】:

感谢您的帮助,正如我所怀疑的那样进行了简单的修复,在解决了一些问题后,它奏效了。谢谢! 你应该问一个单独的问题。【参考方案2】:

您应该向arrayWithContentsOfFile: 提供plist 文件的完整路径。以下应该有效:

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"questions" ofType:@"plist"];
categories = [NSArray arrayWithContentsOfFile:filePath];

【讨论】:

以上是关于访问 Plist 数组/节点 - 目标 C [重复]的主要内容,如果未能解决你的问题,请参考以下文章

编辑 plist 文件(目标 c)

在目标 c 中编辑 plist

需要帮助在 Swift 3 中声明用于 plist 信息检索的数组 [重复]

需要帮助阅读目标 c 中的 plist 文件

如何使用 SWIFT 在 plist 中访问数组及其对象?

在目标c中订购一个数组/字典[重复]