2011-12-30 8 views
0

iOS 5では、次のような問題が発生しました。新しい製品がアプリケーションで選択されるたびにコントローラで次のコードが呼び出されます。コントローラのビューに機能の箇条書きのリストを表示します。スーパービューから削除すると消えないUIImage

すべての箇条書きは、適切な場所(対応するテキストの前)に追加された画像です。

ここで問題となるのは、明らかにランダムに、以前の箇条書きリストから一部の箇条書きを削除しないことです。ただし、メソッドの最初にスーパービューから削除します。

- (void) loadProduct{ 
    for (UIView * bullet in bullets){ 
     bullet.hidden = YES; 
     [bullet removeFromSuperview]; 
    } 
    [bullets removeAllObjects]; 
    [self.view setNeedsDisplay]; 


    ......here some stuff ...... 


    for (int i=0;i< numberOfFeatures;i++) 
    { 

      UIImageView * bullet = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"bullet.png"]]; 
      bullet.frame =CGRectMake(someFloatValue , 
            someOtherFloatValue, 
            6, 
            6); 
      [self.view addSubview:bullet]; 

      [bullets addObject:bullet]; 
      [bullet release]; 

     } 
    } 

bulletsは、コントローラのプロパティであるNSMutableArrayです。

ここで何か問題がありますか? bulletsからすべてを削除するときに、あなただけのスーパービューからラベルを削除している、だから弾丸(UIImageViewコントロール)ですが

[bullets addObject:label]; 

bullets

+0

コードは正常です。弾丸のすべてのオブジェクトが削除されます。あなたがいくつかの弾丸が削除されていない場合、それは配列内にあるのか、それとも表示されていますか? – MadhavanRP

+0

競争条件について私に暗示してくれたbabbidiに感謝します。このメソッドはほぼ同時に2回呼び出されました。 – madewulf

答えて

1

あなただけのラベルを保存しているようですそこに残った。

カスタムコントロール(箇条書きとラベルの両方を保持するビュー)を作成して代わりに使用すると、より簡単な場合があります。

+0

私は最初に投稿したコードについてはまったく正解ですが、これはSOに入れるコードを単純化しながら間違ったものでした。このエラーは元のコードではありませんでした。ここでコードから編集しました。 – madewulf

+0

私は、すべてが今は大丈夫だと思う。 '弾丸 'から他の場所からオブジェクトを取り除いていますか?別の可能性のある問題は、競合状態です(これは、複数のスレッドから '弾丸'にアクセスしている場合のみです)。 –

+0

レースコンディションについてお礼申し上げます。メソッドにブレークポイントを置くだけで、いくつかの条件下でほぼ同時に2回コールされたようです。それはおそらくそれを説明します。どうもありがとう。それはあまり意味がないので、私は質問を削除すると述べた。 – madewulf

関連する問題