Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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
Ios 即使键路径存在,NSDictionary valueForKeyPath也返回nill_Ios_Objective C_Json_Nsdictionary - Fatal编程技术网

Ios 即使键路径存在,NSDictionary valueForKeyPath也返回nill

Ios 即使键路径存在,NSDictionary valueForKeyPath也返回nill,ios,objective-c,json,nsdictionary,Ios,Objective C,Json,Nsdictionary,下面是我的应用程序中的两行代码。第一个工作正常,我得到标签上的值“LE-05330”,但第二个我得到零。第二行我做错了什么 //Working properly self.lblSerialNo.text = [self.PartInfo valueForKeyPath:@"veri.parca_bilgisi.referans_no"]; //valueForKeyPath returns nil so label is empty. self.lblCertNo.text = [self.

下面是我的应用程序中的两行代码。第一个工作正常,我得到标签上的值“LE-05330”,但第二个我得到零。第二行我做错了什么

//Working properly
self.lblSerialNo.text = [self.PartInfo valueForKeyPath:@"veri.parca_bilgisi.referans_no"];

//valueForKeyPath returns nil so label is empty.
self.lblCertNo.text = [self.PartInfo valueForKeyPath:@"veri.sertifika.sertifika_no"];
self.PartInfo对象上的JSON数据如下所示

{
    "durum": true,
    "hata": "",
    "veri": {
        "parca_bilgisi": {
            "imaj": "http://www.mywebsite.com:9898/mobapp/images/arac_hasar/arac-onsolkapi.jpg",
            "parca_tanimi": "ÖN SOL KAPI",
            "marka": "MYBRAND",
            "marka_kodu": "70",
            "model": "MYMODEL",
            "model_kodu": "?",
            "yil": "2005",
            "uretici": "MYManufacturer.",
            "referans_no": "LE-05330",
            "oem_no": "999999",
            "durum": "3",
            "durum_aciklama": "Transferred_to_Supplier"
        },
        "onarim_servis_bilgileri": {
            "servis_adi": "?",
            "iletisim_no": "?",
            "islem_tarihi": "?",
            "hasar_dosya_no": "?"
        },
        "sigorta_bilgileri": {
            "firma_adi": "?",
            "iletisim_no": "?",
            "ilgili_kisi": "?"
        },
        "eksper_bilgileri": {
            "onaylama_tarihi": "?"
        },
        "uretici_bilgileri": {
            "firma": "My Firm AS.",
            "imaj": "harita.jpg",
            "adres": "Carrer de Jacint Verdaguer, 58, 08970",
            "eposta": "myr@email.es",
            "tel": "+36 56565 345 317",
            "web": "www.styaasira.es",
            "kayit_tarihi": "7.7.2017 13:27:44",
            "durum": "3"
        },
        "sertifika": {
            "sertifikasyon_kurulusu": "87",
            "sertifika_no": "87",
            "gecerlilik_tarihi": "87"
        }
    }
} 
用于检索NSDictionary(dict)的我的代码

我取消了服务调用,并尝试了与字符串相同的JSON,仍然没有机会

NSString *json = ...

    NSError *error;
    NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:data
                                                         options:NSJSONReadingMutableLeaves
                                                           error:&error];

    self.lblIssuer.text = [dict valueForKeyPath:@"veri.sertifika.sertifikasyon_kurulusu​"];
在几次不成功的逻辑尝试之后,我决定将重点放在数据上,并尝试修改(simplfy)JSON对象,并尝试查看它是否适用于不同的键名。因此,我首先将节点的名称从“sertifika”更改为“test”,并将3个子节点的名称更改为“a”、“b”和“c”。在这种状态下,我可以使用valueForKeyPath获取值。然后,我把节点的名称改回原来的名称,它也起作用了!!!然后我注释掉了从常量字符串到服务响应读取JSON,。。。等等。。。它也起作用了


有人能说出发生了什么合乎逻辑的事吗?NSDictionary是否有某种疯狂的哈希机制?无论如何,将失败的节点名称更改为原始名称已经解决了我的问题…

能否尝试将其正确转换为NSData。]()使用此选项时会发生什么:
NSDictionary*veri=PartInfo[@“veri”];NSDictionary*sertifika=veri[@“sertifika”];NSString*text=sertifika[@“sertifika_no”];NSLog(@“文本为%@”,文本)能否更新代码以显示如何加载词典?我尝试了上面的json,它对我来说很好。你有什么问题吗else@MostafaTorbjørnBerg刚刚发布了加载代码,但为什么它适用于其他节点而不适用于“sertifika”?@JohnnyRockex它是这样工作的。。。但我需要ValueForkeyPath,您能否尝试将其正确转换为NSData。]()使用此选项时会发生什么:
NSDictionary*veri=PartInfo[@“veri”];NSDictionary*sertifika=veri[@“sertifika”];NSString*text=sertifika[@“sertifika_no”];NSLog(@“文本为%@”,文本)能否更新代码以显示如何加载词典?我尝试了上面的json,它对我来说很好。你有什么问题吗else@MostafaTorbjørnBerg刚刚发布了加载代码,但为什么它适用于其他节点而不适用于“sertifika”?@JohnnyRockex它是这样工作的。。。但我需要一条有价值的道路
NSString *json = ...

    NSError *error;
    NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:data
                                                         options:NSJSONReadingMutableLeaves
                                                           error:&error];

    self.lblIssuer.text = [dict valueForKeyPath:@"veri.sertifika.sertifikasyon_kurulusu​"];