如何将 NSMutableDictionary setObject 值分配为 indexPath.section 值?

Posted

技术标签:

【中文标题】如何将 NSMutableDictionary setObject 值分配为 indexPath.section 值?【英文标题】:How to assign NSMutableDictionary setObject value to become indexPath.section value? 【发布时间】:2018-07-26 07:33:18 【问题描述】:

我有 NSMutableDictionary 并返回结果如下:-

NSMutableDictionary *result = [NSMutableDictionary new];
        distinctNames = [_aryClippedCategoryList valueForKeyPath:@"@distinctUnionOfObjects.category_id"];
        for (NSString *category_id in distinctNames) 
            NSPredicate *predicate = [NSPredicate predicateWithFormat:@"category_id = %@", category_id];
            NSArray *category_group = [_aryClippedCategoryList filteredArrayUsingPredicate:predicate];
            [result setObject:category_group forKey:category_id];

NSLog(@"123 - %@", result); 
NSLog(@"223 - %lu", (unsigned long)distinctNames.count); 

在 NSLog 123 中,结果将如下所示:-

 17 =     (
                
            "category_id" = 17;
            "category_name" = "Apparel & Accessories";
            "sub_category_id" = 17;
            "sub_category_name" = "Fashion jewelry";
        ,
                
            "category_id" = 17;
            "category_name" = "Apparel & Accessories";
            "sub_category_id" = 16;
            "sub_category_name" = Wholesale;
           
    );
    20 =     (
                
            "category_id" = 20;
            "category_name" = "Beauty & Personal Care";
             "sub_category_id" = 288;
            "sub_category_name" = "Pedicure & medicure";
        ,
                
            "category_id" = 20;
            "category_name" = "Beauty & Personal Care";
            "sub_category_id" = 285;
            "sub_category_name" = "Fragrances and perfumes";
        
);

在 NSLog 223 中,结果将如下所示:-

223 - 2

在这种情况下,如何在 CollectionView 中选择 category_group 作为部分值,并在 CollectionView 单元格中显示每组项目(category_id、category_name、sub_category_id、sub_category_name)?

【问题讨论】:

【参考方案1】:

不推荐)你应该使用 NSMutableArray 而不是 NSMutableDictionary。

结构是

Array<Dictionary<Array *> *> *

代码是这样的

NSMutableArray *groups = [NSMutableArray new];
<# your code #>
[groups addObject:@
    @"category_id": category_id,
    @"infos": category_group
];

然后

NSString *groupID = groups[indexPath.section][@"category_id"]

这是部分所需的组值。

NSArray *infos = groups[indexPath.section][@"infos"];
NSDictionary *info = infos[indexPath.item];

这是对象 dict 项目的值

推荐)或将您的data 转换为object。 (对象NSMutableArray&lt;Object *&gt; *

然后使用groups.count 获取部分。

groups[indexPath.section].categoryID

这是sections 所需的组值。

group = groups[indexPath.section]
object = group.infos[indexPath.item]

这是items 的对象值

【讨论】:

嗨@Frank,感谢您的详细解释。但是我卡在- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 如果section 值为groups.count,我怎么能传入numberOfItemInSection? group.infos.count 这就是您需要的物品。我只是犯了一些错误。 srr。 groups.count 代表numberOfSectionsInCollectionView【参考方案2】:

如果你像这样使用 NSLog:

NSLog(@"123 - %@", result); 
NSLog(@"223 - %lu", (unsigned long)distinctNames.count); 

您明确要求它是一个字符串值,并且不会计算任何方程。

如果你想将结果打印为整数,你必须这样做:

NSLog(@"%@", 123 - result); 
NSLog(@"%lu", 223 - (unsigned long)distinctNames.count); 

第一个参数是字符串格式,下一个参数将用于替换此字符串中的%。所以你的计算必须在右边进行。

为了让它更加明显,最好是在 NSLog 之前创建带有结果的局部变量。

【讨论】:

嗨@grzegorz,感谢您的回复。实际上我关心的是如何将上面提到的对象“category_group”设置为section。目前我在 numberOfItemsInSection 和 numberOfSectionsInCollectionView 中遇到错误,因为我不知道如何为其赋值。

以上是关于如何将 NSMutableDictionary setObject 值分配为 indexPath.section 值?的主要内容,如果未能解决你的问题,请参考以下文章

如何将字段添加到 NSMutableDictionary Swift [重复]

如何将 NSMutableDictionary setObject 值分配为 indexPath.section 值?

如何使用键将对象添加到 NSMutableDictionary?

如何在 NSMutableDictionary 中保留部分分数

创建一个包含多个 NSMutableDictionary 对象的 NSMutableArray

如何创建一个包含许多 NSMutableArrays 的 NSMutableDictionary