0

gridView にデータを入力したい。これは、Web サービスから返されたデータを使用して行っています。埋めるために、配列のどのオブジェクトが次のセルになるかをカウントするプロパティ loopIndex があります。ここで CellForRowAtIndexPath メソッドを見ることができます。

- (NRGridViewCell*)gridView:(NRGridView *)gridView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *MyCellIdentifier = @"MyCellIdentifier";

    NRGridViewCell* cell = [gridView dequeueReusableCellWithIdentifier:MyCellIdentifier];

    if(cell == nil){
        cell = [[NRGridViewCell alloc] initWithReuseIdentifier:MyCellIdentifier];

        [[cell textLabel] setFont:[UIFont boldSystemFontOfSize:11.]];
        [[cell detailedTextLabel] setFont:[UIFont systemFontOfSize:11.]];

    }
    NSLog(@"loopIndex: %d",_loopIndex);
    _players = [self getTeam];

       NSData *imgData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[[_players objectAtIndex:_loopIndex]valueForKey:@"image"]]];
       UIImage *image = [[UIImage alloc]initWithData:imgData];
       cell.imageView.image = image;
        cell.textLabel.text = [[_players objectAtIndex:_loopIndex]valueForKey:@"name"];
        cell.detailedTextLabel.text = [[_players objectAtIndex:_loopIndex]valueForKey:@"position"];
    if(_loopIndex < [[self getTeam]count]){
    _loopIndex++;
    }else {
        _loopIndex = _loopIndex;
    }
    return cell;
}

ここにエラーが表示されます。NSData 行で常にクラッシュします。

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[_PFArray objectAtIndex:]: index (30) beyond bounds (30)'

私の loopIndex に問題があると思います。静的な値を使用するだけだからです。1O としましょう

 cell.textLabel.text = [[_players objectAtIndex:_loopIndex]valueForKey:@"name"]; 

クラッシュしません。どうすれば回避できるか知っている人はいますか?

敬具

4

2 に答える 2

0

計算_loopindexを誤っているため、エラーが発生しますが、さらに重要なことはindexPath、このプロトコル メソッドでデータを表示するために計算しているインデックスではなく、変数に依存する必要があることです。

于 2012-10-17T14:14:48.400 に答える
0

試す

    _loopIndex++;
    if(_loopIndex >= [[self getTeam]count]){
        _loopIndex = [[self getTeam]count]-1;
    }

次のように適切に実行してください。

cell = // new default cell;

// calculate _loopindex for next attempt
if (_loopindex < [[self getTeam]count])
{
    //do your job
}

return cell;

セクションとテーブルの行数を適切に設定すると、必要に応じてメソッドgridView cellForItemAtIndexPathを正確な回数呼び出す必要があります。それ以上でもそれ以下でもありません。_loopindexこれにより、nil を返したり、カウンターを誤って計算したりするのを防ぐことができます。

于 2012-10-17T13:42:42.903 に答える