访问 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章