【问题标题】:Can't get value of NSSingleEntryDictionary无法获得 NSSingleEntryDictionary 的值
【发布时间】:2017-05-09 12:38:12
【问题描述】:

我有一个名为“thisList”的 NSDictionary,我需要获取它的键“list_collection”的值。

Xcode 表示该值为“NSSingleEntryDictionary”。

值本身包含一个带有另一个字典的数组。

请看截图:

现在,无论我尝试什么 (objectforKey/valueforKey) 或初始化任何类型的对象 (NSArray/NsMutableArray/NSDictionary/NSMutableDictionary),我最终都会得到一个 nil 值。

显然,我错过了一些有关如何处理此问题的基本知识。

我的问题:我应该如何用键“list_collection”的值初始化一个对象。

这是 json 的(部分)转储:

Printing description of thisList:
{
    archived = 0;
    "chapter_part" = "";
    "chapter_title" = "";
    comment = "";
    "cover_id" = "<null>";
    "created_at" = "2017-01-06T12:59:04.000+01:00";
    "date_created" = "06 January 2017";
    deleted = 0;
    id = 141384502;
    isMyList = 1;
    keywords =     (
    );
    "list_collection" =     {
        lists =         (
                        {
                "speech_locale" = EN;
                subject = engels;
                words =                 (
                                        {
                        word = attitude;
                    },

对我来说最合乎逻辑的方法是:

NSDictionary * myDic = [thisList objectForKey:@"list_collection"];

注意:我没有在此处显式初始化“myDic”。

为了把事情放在上下文中,这是我的代码:

 NSString * hlists = [json objectForKey:@"lists"];
    NSData* data = [hlists dataUsingEncoding:NSUTF8StringEncoding];
    NSArray *wrtsLists = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonParsingError];
    Lists = [[NSMutableArray alloc]init];
    for (NSDictionary *thisList in wrtsLists){
        WordList* theList = [[WordList alloc]init];
        theList.title = [thisList valueForKey:@"title"];
        [Lists addObject:theList];
        NSDictionary *myDic = thisList[@"list_collection"];
       >>>>this is where I put a breakpoint. myDic is nil here
    }

感谢您的见解。

【问题讨论】:

  • 你能发布一些代码和 JSON 数据吗?这样我们就可以帮助您解决问题。
  • 无论你声明你的变量是什么对象类型,如果键是正确的,它就不会是“nil”。类型不匹配可能(将)在以后导致崩溃,但不会使值为零。尝试使用控制台并输入“po thisList.allKeys”,看看您是否正确拼写密钥
  • 根据屏幕截图,您的最合乎逻辑的方法应该可以工作。但是我总是更喜欢像thisList[@"list_collection"] 这样的密钥订阅

标签: ios objective-c nsdictionary


【解决方案1】:

您可以使用此代码从“thisList”中简单地获取“list_collection”数组

NSDictionary *myDic = thisList[@"list_collection"]; 

【讨论】:

    【解决方案2】:

    最后,我发现这是一个 Xcode 问题。 调试区域只是没有正确显示我的对象的值。 我重新启动了 Xcode,事情开始按预期工作。 我为此失去了几个小时的生命。但是我学到了很多,感谢您的好建议。

    【讨论】:

      【解决方案3】:

      试试这个希望对你有帮助

      NSDictionary *myDic =  [thelist valueForKey:"list_collection"];
      

      【讨论】:

      • 不要使用valueForKey,除非你能解释为什么你明确需要KVC。
      猜你喜欢
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      • 2018-01-04
      相关资源
      最近更新 更多