0

このような質問が以前に投稿されたことは知っていますが、自分のコードに固有の直接的な回答を得ようとしていました. 私は他の投稿を見て、それに従ってこの段階に到達しました。

ログに(null) libc++abi.dylib: terminate called throwing an exception行があります。私はそれを次のコード行までたどりました:

normalCell.textLabel.text = [[displayArray objectAtIndex:indexPath.row] objectForKey:@"name"];

これは、cellForRowAtIndexPathこのコードを持つ私のメソッドにあります:

static NSString *normalCellIdentifier = @"normalCell";
static NSString *topRowCellIdentifier = @"topRowCell";

UITableViewCell *normalCell = [tableView dequeueReusableCellWithIdentifier:normalCellIdentifier];
if (normalCell == nil)
{
    normalCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:normalCellIdentifier];
}

UITableViewCell *topRowCell = [tableView dequeueReusableCellWithIdentifier:topRowCellIdentifier];
if (topRowCell == nil)
{
    topRowCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:topRowCellIdentifier];
}

// Configure the cell...
if (searchBar.selectedScopeButtonIndex != 0)
{
    normalCell.textLabel.text = [[displayArray objectAtIndex:indexPath.row] objectForKey:@"name"];
}

if (segmentedControl.selectedSegmentIndex == 0)
{
    if (indexPath.section == 0)
    {
        [self makeButtonsForTableView:tableView atIndexPath:indexPath withTableViewCell:topRowCell];

        [topRowCell addSubview:button1];
        [topRowCell addSubview:button2];

        topRowCell.selectionStyle = UITableViewCellSelectionStyleNone;
        return topRowCell;            
    }
    else
    {
        return normalCell;
    }
}
else
{
    return normalCell;
}

ボタンのmakeButtonsForTableViewすべてのコードがありますが、コードからそれを削除しても問題は解決しないため、それを含める必要がないため、それは問題ではありません。

の内容は、および で選択されたスコープにdisplayArray応じて異なります。selectedSegmentIndexUISegmentedControlUISearchBar

私のウェブサイトドメインからのインポートから値を取得する各配列は、次のとおりです。 modsArray itemsArray serversArray pluginsArray newItemsArray newBlocksArray newMobsArray

ご協力いただきありがとうございます。

-- 編集 22:40GMT - 27/09/2012 --

displayArrayアプリがロードされたときの内容をログに記録しました。これがログです

2012-09-27 22:39:56.539 AppName[22949:11303] (
)
2012-09-27 22:39:56.675 AppName[22949:11303] (
)

-- 編集 23:13GMT - 27/09/2012 --

興味深いことに、タブを変更して戻ると、ログは次のように変更されます。

2012-09-27 23:13:14.074 MinePedia[23853:11303] DisplayArray Count: 0
2012-09-27 23:13:14.074 MinePedia[23853:11303] IndexPath Row: 0
2012-09-27 23:13:14.355 MinePedia[23853:11303] DisplayArray Count: 0
2012-09-27 23:13:14.355 MinePedia[23853:11303] IndexPath Row: 1

これに

2012-09-27 23:13:14.074 MinePedia[23853:11303] DisplayArray Count: 1
2012-09-27 23:13:14.074 MinePedia[23853:11303] IndexPath Row: 1
2012-09-27 23:13:14.355 MinePedia[23853:11303] DisplayArray Count: 1
2012-09-27 23:13:14.355 MinePedia[23853:11303] IndexPath Row: 0

これが何を意味するか知っている人はいますか?

-- 編集 23:42 - 27/09/2012 --

わかりましたので、以前とは別の問題です。クラッシュしないので解決されました。Mayur に感謝します。しかし、起動時に上部のタブが変更されるまで、スコープとテーブル ビューは indexpath よりも大きいままです。カウント。これを修正するにはどうすればよいですか?

4

2 に答える 2

1

次のようにしてください:

normalCell.textLabel.text = [NSString stringWithFormat:@"%@",[[displayArray objectAtIndex:indexPath.row] objectForKey:@"name"]];

これにより、null 値が発生してもクラッシュしません。

また、配列がいっぱいになっているかどうかを常に確認し、次のようにリストにアクセスしてください。

if (searchBar.selectedScopeButtonIndex != 0)
{
    if(indexPath.row < [displayArray count])
    {
         normalCell.textLabel.text = [NSString stringWithFormat:@"%@",[[displayArray objectAtIndex:indexPath.row] objectForKey:@"name"]];
    }
}
于 2012-09-27T21:45:28.977 に答える
0

コメントの更新によると、displayArray呼び出したときに要素がありませんobjectAtIndex:。これにより、例外が発生します。がこのセクションの のカウントtableView:numberOfRowsInSection:と等しい数の行を返すことを確認する必要があります。displayArray

于 2012-09-27T22:07:46.033 に答える