Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在IOS中从字典中提取数据_Objective C_Dictionary - Fatal编程技术网

Objective c 在IOS中从字典中提取数据

Objective c 在IOS中从字典中提取数据,objective-c,dictionary,Objective C,Dictionary,我正在解析xml文件并在字典中获取值,我尝试按名称提取值,但我获取的部分值和剩余值为空。这是我的字典 dictionary: { "__name" = QF; "_category" = "C&M"; "_id" = AB2001; "_ni_exempt" = no; "_topic" = Alertness; answers = { answer = ( { "_correct" = no

我正在解析xml文件并在字典中获取值,我尝试按名称提取值,但我获取的部分值和剩余值为空。这是我的字典

dictionary: {
"__name" = QF;
"_category" = "C&M";
"_id" = AB2001;
"_ni_exempt" = no;
"_topic" = Alertness;
answers =     {
    answer =         (
                    {
            "_correct" = no;
            text = "give an arm signal as well as using your indicators";
        },
                    {
            "_correct" = no;
            text = "signal so that other drivers can slow down for you";
        },
                    {
            "_correct" = yes;
            text = "look over your shoulder for a final check";
        },
                    {
            "_correct" = no;
            text = "select a higher gear than normal";
        }
    );
};
question =     {
    explanation =         {
        text = "If you want to make a U-turn, slow down and ensure that the road is clear in both directions. Make sure that the road is wide enough to carry out the manoeuvre safely.";
        voice =             {
            "_id" = "AB2001-2";
        };
    };
    prompt = "Mark one answer";
    text = "Before you make a U-turn in the road, you should";
    voice =         {
        "_id" = "AB2001-1";
    };
    xref = "DES s4, DES s9, HC r159-161";
};
}
这是我试图提取值的代码

-(void)fetchValuesFromDictioanry:(NSDictionary*)xmlDict
{

for (NSString *string in [xmlDict allKeys])
{
    if ([[xmlDict valueForKey:string] isKindOfClass:[NSDictionary class]])
    {
        [self fetchValuesFromDictioanry:[xmlDict valueForKey:string]];
    }
    else if ([[xmlDict valueForKey:string] isKindOfClass:[NSString class]])
    {
        if ([string isEqualToString:@"_id"])
        {
            _lblID.text = [xmlDict valueForKey:@"_id"];
            NSLog(@"ZZZ %@",_lblID.text);

            _lblAlert.text = [xmlDict objectForKey:@"_topic"];
            NSLog(@"Make: %@ ",_lblAlert.text);

             _lblxref.text = [xmlDict objectForKey:@"xref"];
             NSLog(@"Make: %@ ",_lblxref.text);

            _lbltext.text = [xmlDict objectForKey:@"text"];
            NSLog(@"Model: %@ ", _lbltext.text);

            _lblgraphic.text = [xmlDict objectForKey:@"explanation"];
            NSLog(@"Model: %@ ",_lblgraphic.text);

            _lblprompt.text = [xmlDict objectForKey:@"prompt"];
            NSLog(@"Model: %@ ",_lblprompt.text);

            _lblvoice.text = [xmlDict objectForKey:@"_id"];
            NSLog(@"Model: %@ ", _lblvoice.text);
        }
       // NSLog(@"MMM: %@ ", [xmlDict valueForKey:string]);

        //Set here other labels
    }
    else if ([[xmlDict valueForKey:string] isKindOfClass:[NSArray class]])
    {
        for (NSDictionary *dictionary in [xmlDict valueForKey:string]) {

            [self fetchValuesFromDictioanry:dictionary];
        }
    }
}
}

现在,当我在标签中获取值时,比如在lblID和lblAlert中,它会显示值,但当我尝试获取内部值时,它会显示null,比如lbltext或lblxref。我怎样才能从内部字典中找到值

将函数FetchValuesFromDictionAnry替换为以下内容

-(void)fetchValuesFromDictioanry:(NSDictionary*)xmlDict
{
    if ([xmlDict isKindOfClass:[NSDictionary class]])
    {
        for (NSString *string in [xmlDict allKeys])
        {
            if ([[xmlDict valueForKey:string] isKindOfClass:[NSDictionary class]])
            {
                [self fetchValuesFromDictioanry:[xmlDict valueForKey:string]];
            }
            else if ([[xmlDict valueForKey:string] isKindOfClass:[NSString class]])
            {
                if ([string isEqualToString:@"_id"])
                {
                    _lblID.text = [xmlDict valueForKey:string];
                    NSLog(@"ZZZ %@",_lblID.text);
                }
                else if ([string isEqualToString:@"_topic"])
                {
                    _lblAlert.text = [xmlDict objectForKey:string];
                    NSLog(@"Make: %@ ",_lblAlert.text);
                }
                else if ([string isEqualToString:@"xref"])
                {

                    _lblxref.text = [xmlDict objectForKey:string];
                    NSLog(@"Make: %@ ",_lblxref.text);
                }
                else if ([string isEqualToString:@"text"])
                {
                    _lbltext.text = [xmlDict objectForKey:string];
                    NSLog(@"Model: %@ ", _lbltext.text);
                }
                else if ([string isEqualToString:@"explanation"])
                {
                    _lblgraphic.text = [xmlDict objectForKey:string];
                    NSLog(@"Model: %@ ",_lblgraphic.text);
                }
                else if ([string isEqualToString:@"prompt"])
                {
                    _lblprompt.text = [xmlDict objectForKey:string];
                    NSLog(@"Model: %@ ",_lblprompt.text);
                }
                else if ([string isEqualToString:@"_id"])
                {
                    _lblvoice.text = [xmlDict objectForKey:string];
                    NSLog(@"Model: %@ ", _lblvoice.text);
                }

            }
            else if ([[xmlDict valueForKey:string] isKindOfClass:[NSArray class]])
            {
                for (NSDictionary *dictionary in [xmlDict valueForKey:string]) {

                    [self fetchValuesFromDictioanry:dictionary];
                }
            }
        }
    }
    else
    {
        NSLog(@"Not a dictionary")
    }

}

外部字典中的键
answers
是一个具有单个键
answer
的字典,其值是一个字典数组,因此您需要以这种方式访问它-首先从
answers
获取字典,然后从该字典中的键
answer
获取数组,然后迭代数组以获取每个答案词典。你能告诉我如何完成代码吗?@paulw11并非每个键都在要提取的根词典中,例如,
提示符
解释
在键
问题
下,但
文本
在不同的位置,但肯定不在根目录中;你考虑过了吗?我已经得到了解释、提示和文本值,但现在我对应答标签下的正确和文本标签感到困惑,我如何才能得到这个@holex@Nabeel,它应该是这样的:
…=[[[rootDict objectForKey:@“answers”]objectForKey:@“answer”]objectAtIndex:0]objectForKey:@“text”]并且您应该具有“发出arm信号并使用您的指示器”。获取此错误[u nsarray objectForKeyedSubscript:]:未识别的选择器发送到实例0x600000256830 2017-12-13 23:48:45.662669-0800 XML[2175:746546]***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\uu NSArrayM objectForKeyedSubscript:]:发送到实例0x600000256830的选择器无法识别。@Hitesh SULTANIYA如何从同名标记中获取值?@Hitesh SULTANIYA无法捕获if语句的解释。@HiteshSultaniya@Nabeel是印刷“不是字典”吗在日志中?如果是,则说明您的词典中存在问题,我认为否,如果我记录该值,则不是打印词典,而是显示null。@Hitesh Sultaniya