[__NSCFString count]:无法识别的选择器发送到实例0x60400043f9c0

时间:2017-10-11 10:53:49

标签: ios

我正在开发iOS应用程序。当我尝试使用NSMutableArray获取节的单元格数时,我得到

  

[__ NSCFString count]:发送到实例的无法识别的选择器   0x60400043f9c0。

请帮忙。这是代码:

for (NSDictionary *dict in _array) {
        NSString *dic = [dict objectForKey:@"product_base"];
            if (dic == nil) {
            }else{
                [_productfliters addObject:dic];
            }
       NSString  *dicMaterial = [dict valueForKey:@"product_material"];
            if (dicMaterial == nil) {
            }else{
                [_productfliters addObject:dicMaterial];
            }

    //                NSMutableDictionary *value  = [[NSMutableDictionary alloc]init];
    //                [value setValue:[dict valueForKey:@"product_size"] forKey:@"ABC"];
        NSString *dicSize = [dict valueForKey:@"product_size"];
        [_productfliters addObject:dicSize];
        }

        self.sectionNames =[_arrayHeading mutableCopy];
        self.sectionItems =[_productfliters mutableCopy];

        NSLog(@"%@",self.sectionItems);


        _tableview.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
        _tableview.rowHeight = UITableViewAutomaticDimension;
        _tableview.estimatedRowHeight = 100;
        self.expandedSectionHeaderNumber = -1;
        [_tableview reloadData];

- (void)tableViewExpandSection:(NSInteger)section withImage:(UIImageView *)imageView {
        NSArray *sectionData = [self.sectionItems objectAtIndex:section];

        if (sectionData.count == 0) {      //Error this part app crash NSCFString count
            self.expandedSectionHeaderNumber = -1;
            return;
        } else {
            [UIView animateWithDuration:0.4 animations:^{
                imageView.transform = CGAffineTransformMakeRotation((180.0 * M_PI) / 180.0);
            }];
            NSMutableArray *arrayOfIndexPaths = [NSMutableArray array];
            for (int i=0; i< sectionData.count; i++) {
                NSIndexPath *index = [NSIndexPath indexPathForRow:i inSection:section];
                [arrayOfIndexPaths addObject:index];
            }
            self.expandedSectionHeaderNumber = section;
            [_tableview beginUpdates];
            [_tableview insertRowsAtIndexPaths:arrayOfIndexPaths withRowAnimation: UITableViewRowAnimationFade];
            [_tableview endUpdates];
        }
    }

1 个答案:

答案 0 :(得分:0)

您卸载字符串并将其放入for (NSDictionary *dict in _array) { NSString *dic = [dict objectForKey:@"product_base"]; if (dic == nil) { }else{ [_productfliters addObject:dic]; } ...

sectionItems

然后将其分配给self.sectionItems =[_productfliters mutableCopy];

NSArray *sectionData = [self.sectionItems objectAtIndex:section];

然后你提取其中一个字符串,但把它称为一个数组(即使你把字符串放在那里,所以它是一个字符串):

NSArray

仅仅因为你说objectAtIndex:在这里并没有这样做。你只是告诉编译器你期望什么是真的。 id返回NSArray(“任何对象”)。当你说它是.count时它会信任你,但事实并非如此。

然后,您在NSString上致电sectionNames并崩溃。

目前还不清楚你在这里尝试做什么,但你有一个字符串数组,而不是一个数组数组。

请注意,ObjC有一个名为轻量级泛型的新功能,可能会抓住这个错误。如果你将NSArray<NSString *>*声明为NSArray<NSArray<NSString *>*>*if SLComposeViewController.isAvailable(forServiceType: SLServiceTypeFacebook) { var vc: SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeFacebook) vc.setInitialText("My text") self.present(vc, animated: true, completion: nil) } (取决于你想要的那个),编译器可能会抛出警告(甚至可能是错误)。轻量级泛型远不及Swift的泛型,但是它们可以捕捉到像这样的类型不匹配。