【问题标题】:Reading an array of dictionaries from plist从 plist 中读取字典数组
【发布时间】:2013-01-08 15:31:50
【问题描述】:

您好,我正在尝试从 plist 中读取值,这就是我的 plist 在 atm 中的样子

<plist version="1.0">
<array>
    <dict>
        <key>Title</key>
        <string>Mickey Mouse</string>
        <key>Image</key>
        <string>mickeymouse.png</string>
        <key>Hint1</key>
        <string>Hint 1</string>
        <key>Hint2</key>
        <string>Hint 2</string>
        <key>Hint3</key>
        <string>Hint 3</string>
    </dict>
    <dict>
        <key>Title</key>
        <string>Peter Pan</string>
        <key>Image</key>
        <string>peterpan.png</string>
        <key>Hint1</key>
        <string>Hint 1</string>
        <key>Hint2</key>
        <string>Hint 2</string>
        <key>Hint3</key>
        <string>Hint 3</string>
    </dict>
</array>
</plist>

这是我正在使用的代码,但是它只是崩溃了。

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSString *questionNumber = [NSMutableString stringWithFormat:@"Item 0"];
NSString *path = [[NSBundle mainBundle] pathForResource:@"Level1" ofType:@"plist"];
NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path];
NSDictionary *questionNumberDictionary = [array objectForKey:questionNumber];
NSString *questionTitle = [questionNumberDictionary objectForKey:@"Title"];
NSString *questionImage = [questionNumberDictionary objectForKey:@"Image"];
NSString *questionHint1 = [questionNumberDictionary objectForKey:@"Hint1"];
NSString *questionHint2 = [questionNumberDictionary objectForKey:@"Hint2"];
NSString *questionHint3 = [questionNumberDictionary objectForKey:@"Hint3"];

【问题讨论】:

    标签: nsmutablearray nsarray plist nsdictionary


    【解决方案1】:

    下面一行有问题

    NSDictionary *questionNumberDictionary = [array objectForKey:questionNumber];

    您需要使用 for 循环来迭代数组

     NSString *path = [[NSBundle mainBundle] pathForResource:@"Level1" ofType:@"plist"];
        NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path];
    
        for (NSDictionary *dict in array) {
            NSString *questionTitle = [dict objectForKey:@"Title"];
            NSString *questionImage = [dict objectForKey:@"Image"];
            NSString *questionHint1 = [dict objectForKey:@"Hint1"];
            NSString *questionHint2 = [dict objectForKey:@"Hint2"];
            NSString *questionHint3 = [dict objectForKey:@"Hint3"];
    
        }
    

    这会解决你的问题。

    【讨论】:

    • 实际上我仍然卡住了如何选择要使用数组中的哪个项目,目前当我使用 NSLog 时,它会显示第二个项目的值。
    • @Sami 你能澄清一下你想做什么吗?好像您将 NSLog(@"questionTitle == %@", questionTitle) 语句放在 for 循环中,它将打印数组中所有 questionTitle 的值。
    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多