iOS:检查值? NSDictionary,NSArray,NSString

时间:2013-01-16 16:25:54

标签: ios nsarray nsdictionary didselectrowatindexpath


跳过以下

这些值是TVC didSelectRowAtIndexPath方法的前三行,当我选择一行中的项目时,它会给我各种异常。

我如何:

一个。检查下面的字典,数组和selectedCategory是否有值。

湾如果结果不是,确保他们这样做?

NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"News"];
NSString *selectedCategory = [array objectAtIndex:indexPath.row];

到此处:

来自UIView tableView的异常:numberOfRowsInSection:]:无法识别的选择器发送到实例0x7193a60

3 个答案:

答案 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.
}