【问题标题】:Count of array inside NSDictionary is not logged although the array itself is logged尽管记录了数组本身,但未记录 NSDictionary 中的数组计数
【发布时间】:2012-03-05 19:02:04
【问题描述】:

我正在使用名为sectionsNSMutableArray 来存储我的UITableView 的部分数据。

每个部分都是一个NSDictionary,其中包含以下项目:Stuff,另一个用于保存该部分数据行的数组,以及Header,一个用于表示该部分标题的字符串。

我遇到的问题是尝试获取 Stuff 数组的计数。

NSLog(@"Returning the count of %@", [[[sections objectAtIndex:0] objectForKey:@"Stuff"] count]); 

我已经能够确认[[sections objectAtIndex:0] objectForKey:@"Stuff"] 确实得到了我的数组;如果我这样做

NSLog(@"returning the contents of %@", [[sections objectAtIndex:0] objectForKey:@"Stuff"]);

内容已记录。

我也知道通常[Stuff count] 会很乐意返回数组的计数。

我在这里遗漏了什么还是因为数组在字典中而有所不同?

【问题讨论】:

    标签: objective-c cocoa-touch nsarray nsdictionary nslog


    【解决方案1】:

    您使用%@ 作为格式说明符,但[NSArray count] 返回NSUinteger

    根据format specifier docs,您应该将其转换为无符号长整数并使用%lu。如果你只使用 iOS,%u 没有演员表应该没问题。

    【讨论】:

    • 感谢您的意见。我只是在那里输入了 %@ 。在我的代码中,我实际上正在使用 %i 并且在实施 Kirby 的类型转换修复后它似乎工作正常。
    【解决方案2】:

    字典不知道它持有什么样的对象,因此您必须通过分配给 NSMutableArray 或在您的情况下将字典返回的对象转换为 NSMutableArray * 来告诉它

    NSLog(@"Returning the count of %@", [(NSArray *)[[sections objectAtIndex:0] objectForKey:@"Stuff"] count]);
    

    【讨论】:

    • 感谢您的快速答复。这解决了我的问题。为了将来参考,我是否需要在需要访问字典中数组的数组方法时进行这样的类型转换?
    【解决方案3】:

    -count 方法返回一个整数,而不是一个对象,因此您需要使用正确的格式说明符:

    NSLog(@"Returning the count of %d", [[[sections objectAtIndex:0] objectForKey:@"Stuff"] count]);
    

    注意使用%d 而不是%@

    【讨论】:

      【解决方案4】:
      NSLog(@"Returning the count of %@", [[[sections objectAtIndex:0] objectForKey:@"Stuff"] count]);
      

      这应该可以工作..除了一个大错误.. %@ 用于对象(指针).. 你得到的是一个整数(数组计数).. 将 %@ 更改为 %d然后再试一次

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-20
        • 2019-10-31
        • 1970-01-01
        相关资源
        最近更新 更多