0

以下をスキップ

これらの値は、TVC didSelectRowAtIndexPath メソッドの最初の 3 行であり、行内の項目を選択するとあらゆる種類の例外が発生します。

方法:

a. 以下のディクショナリ、配列、selectedCategory に値があることを確認します。

b. 彼らがそうしないことが判明した場合、彼らがそうするようにしますか?

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

ここまで:

UIView tableView:numberOfRowsInSection:] からの例外: 認識されないセレクターがインスタンス 0x7193a60 に送信されました

4

3 に答える 3

0

NSPlaceholderString の initWithString メソッドが引数として nil を取得したようです。したがって、これがいつ発生するかを正確に把握するには、例外ブレークポイントを追加するとよいでしょう。こちらをご覧ください

于 2013-01-16T16:59:28.563 に答える
0

チェックできる値があることを確認するには...

[dictionary count];

[array count];

[selectedCategory length];

または、次のようなことを確認できます...

dictionary == nil;

array == nil;

[selectedCategory isEqualToString:@""];

selectedCategory == nil;

たくさんの方法があります。何を求めているのか正確にはわかりませんが、これらを確認できます。

于 2013-01-16T17:01:11.647 に答える
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.
}
于 2013-01-16T17:02:29.030 に答える