0

コアデータからのデータをテーブルビューにロードします。テキストが読み込まれます。各セルにはuiimageviewがあります。テーブルが呼び出すcellForRow:と、画像が非表示に設定されるか、非表示に設定されなくなります(コアデータの内容によって異なります)。

コード:

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath{

static NSString * identifier = @"identifier";

self.cell = [tableView dequeueReusableCellWithIdentifier:identifier];

HuntingRifleGuns *handguns = [self.tableArray objectAtIndex:indexPath.row];

NSString *brandModel = [[handguns.brand stringByAppendingString:@" "] stringByAppendingString:handguns.model];

self.cell.mainLabel.text = brandModel;

self.cell.nicknameLabel.text = handguns.nickname;
//Right below me, is where is set the imageView to hidden, or not hidden. 
self.cell.alert.hidden = handguns.showBadge.boolValue;

self.cell.alert.image = [UIImage imageNamed:@"tvicon.png"];

return self.cell;
}

私の問題は、テーブルビューに1つのセルがある場合は完全に機能しますが、テーブルに1つ以上のセルがある場合は機能します。

セルの画像が削除されたときに非表示になっているかどうかを確認したいのですが、次のようになります。

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

if (editingStyle == UITableViewCellEditingStyleDelete) {        

    if (!self.cell.alert.isHidden) {


        NSLog(@"showing");

    }
 else{

NSLog(@"Not showing");
}
     .........

しかし、それがテストするとき、それは常に正しいことをするわけではありません。showingどちらかまたはnot showingランダムに印刷するだけです。そして、それがセル上に画像を表示するので、それが表示されるべきかどうかを知っています。これの理由は何でしょうか?ちなみに、ユーザーは画像をさまざまなビューで非表示または非表示に設定できますが、テーブルビューには常に正しいデータが表示されます。つまり、画像をテストしたときに、常に表示または非表示になっているとは限りません。仕事。

助けてくれてありがとう!

4

2 に答える 2

2

@propertyと呼ばれるを作成しましたcell。それはうまくいきません。

UITableViewCellカスタムセルで変数または変数を使用する必要があります。

CustomCell *cell = [tableView dequeue...];

また、文字列の処理はメモリ効率があまり良くありません。stringWithFormat代わりに使用してください:

cell.mainLabel.text = [NSString stringWithFormat:@"%@ %@",
       handguns.brands, handguns.model]; 

また、ビューが非表示になっているかどうかを確認してアプリケーションロジックに通知することは、非常に悪い習慣です。むしろ、堅牢なデータモデルを用意し、代わりにデータモデルをクエリする必要があります。あなたの場合、handguns画像があるかどうかにかかわらず、適切なオブジェクトを照会する必要があります。

于 2013-03-24T20:57:33.513 に答える
1

デキューされたセルをのプロパティに割り当てているのは奇妙なことですself-tableView:cellForRowAtIndexPath:セルは非決定論的な方法で要求されるため、これはほぼ確実にあなたが思っていることではありません。デキューされたセルをローカルスコープの変数に割り当てる必要があります。のパラメータを使用して、-tableView:commitEditingStyle:forRowAtIndexPath:作業するセルを取得します。例えば:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
  if (editingStyle == UITableViewCellEditingStyleDelete) {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if ([[[cell textLabel] text] isEqualToString:@"foo"]) {
      NSLog(@"showing");
    } else{
      NSLog(@"Not showing");
    }
  }
}

また、このような問題をデバッグする場合は、問題を可能な限り単純なものに減らして、問題を引き起こすことが役立つことがよくあります。UITableViewCellカスタムセルやそこで行っていることを使用する代わりに、デフォルトの外観のシンプルなセルを使用するとどうなりますか。また、セルに追加した画像ビューを非表示または表示する代わりに、デフォルトのテキストを「foo」または「bar」などに変更するだけですか?それでも問題が解決しない場合は、コードがはるかに単純で、ここで簡単に説明できるようになります。問題が発生しなくなった場合は、問題を引き起こす変更が見つかるまで、カスタムのものを一度に1つずつ追加して戻すことができます。

于 2013-03-24T21:06:46.703 に答える