如何在collectionView numberOfItemsInSection中获取循环项目计数

时间:2018-04-10 03:16:18

标签: ios objective-c uicollectionview

我有NSMutableArray如下: -

enter image description here

在我的UICollectionView numberOfItemsInSection中,如何获取attribute_name的项目数?例如,在attribute_group_name Color部分下,我将获得4个项目。

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {

    return self.attributeGroupList[section].count;  //HOW CAN I GET ITEM COUNT FOR ATTRIBUTE_NAME?
}

更新: -

具有新数据结构的示例输出: -

 {
        "attribute_group_name" = Color;
        names =         (
            Black,
            White,
            Gold,
            Red
        );
    },
        {
        "attribute_group_name" = Service;
        names =         (
            "Free Shipping",
            Insurance
        );
    },
        {
        "attribute_group_name" = Telco;
        names =         (
            Digi,
            Maxis,
            Celcom
        );
    },
        {
        "attribute_group_name" = Material;
        names =         (
            Wood
        );
    },
        {
        "attribute_group_name" = Brand;
        names =         (
            Apple,
            Mi,
            Gome,
            HuaWei
        );
    },
        {
        "attribute_group_name" = RAM;
        names =         (
            4G,
            8G,
            16G
        );
    },
        {
        "attribute_group_name" = Size;
        names =         (
            1200sqf,
            908sqf
        );
    },
        {
        "attribute_group_name" = Location;
        names =         (
            "Petaling Jaya",
            "Kuala Lumpur",
            Ipoh
        );
    },
        {
        "attribute_group_name" = Memory;
        names =         (
            32G,
            64G,
            128G,
            256G
        );
    },
        {
        "attribute_group_name" = Warranty;
        names =         (
            "1 Year"
        );
    }

enter image description here

1 个答案:

答案 0 :(得分:1)

如果我查看您的数据结构,我会说:

self.attributeGroupList[section].count-1

" -1"在这里是因为您的数据结构看起来只有一个不同的密钥。 但我认为这不是你要等待的答案。

这里真正的问题是你的数据结构,我肯定会这样做:

{
 "group_name": Color;
 "names":["Black","White","Red"];
}

这样你就可以这样做:

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {

    return self.attributeGroupList[section][@"names"].count;
}

编辑:

好的,所以你做得很好,改变的唯一小事就是那个部分:

    for (int i = 0; i < groupNames.count; i++)
    {
        NSString *name = [[groupNames objectAtIndex:i] objectForKey:@"attribute_name"];
        [entry setObject:name forKey:[NSString stringWithFormat:@"attribute_name%d", i + 1]];
    }

只需要这样做,我确信有一种更聪明的方法,但这里很简单:

NSMutableArray *resultArray = [NSMutableArray new];
NSArray *groups = [_filterItem valueForKeyPath:@"@distinctUnionOfObjects.attribute_group_name"];
for (NSString *attribute_group_name_header in groups){
     NSMutableDictionary *entry = [NSMutableDictionary new];
     [entry setObject:attribute_group_name_header forKey:@"attribute_group_name"];

      NSArray *groupNames = [_filterItem filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"attribute_group_name = %@", attribute_group_name_header]];
      NSMutableArray *names = [NSMutableArray new];
      for (int i = 0; i < groupNames.count; i++){
           NSString *name = [[groupNames objectAtIndex:i] objectForKey:@"attribute_name"];
           [names addObject: name];
      }
      [entry setObject: names forKey:@"names"];
      [resultArray addObject:entry];
}

编辑2:

看完你的最终物品后,似乎我忘了添加&#34; @&#34;之前&#34;名称&#34;串。因此,请确保在任何字符串之前(第一个EDIT已相应更正)。

另外,也许在添加到数组(NSString *)之前添加类似于names的字符串,如下所示:

 NSString *name = (NSString *)[[groupNames objectAtIndex:i] objectForKey:@"attribute_name"];

这将为您提供一个字符串数组,而不是随机对象数组(就像您目前所拥有的那样),这可能很难使用。

编辑3:

我们可以做到啊。 看起来它没有抓住钥匙&#34;名称&#34; 所以你需要更加具体。这样的事情:

return ((NSArray *)[self.attributeGroupList[0] objectForKey:@"names"]).count

请记住,这段代码非常糟糕。我将一个对象强制转换为一个数组。这是一个假设,您应该在执行此操作之前对对象执行一些测试。因为如果数据结构发生变化,这将会崩溃。

注:

你在一个问题上提出了很多问题。 Stackoverflow就是要解决一个精确且定义良好的问题,以便您的问题可以对其他人有所帮助。一般来说,您在代码中肯定需要帮助。所以这绝对不是发布这个的地方。我建议你去看看像Codementor这样的网站