我正在开发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];
}
}
答案 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的泛型,但是它们可以捕捉到像这样的类型不匹配。