跳过以下
这些值是TVC didSelectRowAtIndexPath方法的前三行,当我选择一行中的项目时,它会给我各种异常。
我如何:
一个。检查下面的字典,数组和selectedCategory是否有值。
湾如果结果不是,确保他们这样做?
NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"News"];
NSString *selectedCategory = [array objectAtIndex:indexPath.row];
到此处:
来自UIView tableView的异常:numberOfRowsInSection:]:无法识别的选择器发送到实例0x7193a60
答案 0 :(得分:0)
似乎NSPlaceholderString的initWithString方法得到一个nil作为参数。 因此,要想确定何时发生这种情况,最好添加一个异常断点。看看here
答案 1 :(得分:0)
要检查它们是否有值,您可以查看...
[dictionary count];
[array count];
[selectedCategory length];
或者你可以检查像...这样的东西。
dictionary == nil;
array == nil;
[selectedCategory isEqualToString:@""];
selectedCategory == nil;
有很多方法。不完全确定你在问什么,但你可以检查这些。
答案 2 :(得分:0)
这是一个简单的调整。通常有更好的方法来存储数据,而不是嵌套所有这些数据集合,但这是一个简单的替代,你已经应该停止崩溃。
// First check your listOfItems
NSDictionary *dictionary = NULL;
if (listOfItems.count > indexPath.section) {
dictionary = [listOfItems objectAtIndex:indexPath.section];
}
// Next check your dictionary isn't null.
NSArray *array = NULL;
if (dictionary) {
array = [dictionary objectForKey:@"News"];
}
// Next check your array and make sure your array has values.
NSString *selectedCategory = NULL;
if (array.count > indexPath.row) {
selectedCategory = [array objectAtIndex:indexPath.row];
}
// Finally do your stuff
if (selectedCategory) {
// Do your stuff
} else {
// Something went wrong along the way and you don't have a selectedCategory string.
}