3

こんにちは私はuiscrollviewを持っており、uiscrollview内にuiimageviewのオブジェクトが1つあります。アプリを起動します。次に、scrollviewを右にスクロールすると、scrollviewが変更されますが、-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollViewで追加した次のuiimageviewオブジェクトが表示されません。次のオブジェクトを追加する前に、前のオブジェクトを削除します...何が問題になっていますか?

私が使用するオブジェクトを削除するには

UIImageView *l;

    for (NSInteger ko=0; ko<[[scroll subviews] count]; ko++){
        if ([[[scroll subviews] objectAtIndex:0] isKindOfClass:[UIImageView class]]){

            //This code never gets hit
            l=[[scroll subviews] objectAtIndex:0];
            [l removeFromSuperview];
            l=nil;

        }
    }

次に、次のオブジェクトを追加します

[スクロールaddSubview:imageView];

スクロールビューで110枚の画像を追加するとアプリがクラッシュするため、前のオブジェクトを削除しました。そのため、メモリを管理する必要があると思います。これが、前のオブジェクトを削除する理由です。

誰でも助けてください!

4

2 に答える 2

2

私が見る最初の問題は、配列を変更しながらループしていることです。また、koループインデックスはどこにも使用されていません。あなたはいつもアイテム0をつかみます。

どうですか:

NSArray* subviews = [[NSArray alloc] initWithArray: scroll.subviews];
for (UIView* view in subviews) {
    if ([view isKindOfClass:[UIImageView class]]) {
         [view removeFromSuperview];
    }
}
[subviews release];

それはまさにあなたがやろうとしていることではありませんか?

于 2010-01-23T15:44:45.200 に答える
2

あなたを正しい軌道に乗せるためのいくつかの提案:

  1. メモリが問題であると思われる場合は、問題を分割してください。たとえば、一度に10枚の画像を追加/削除します。

  2. UIViewのtagプロパティは、独自のループで問題が発生しないようにする場合の親友です。必要なときにUIImageViewに特定のタグを設定し、[UIView viewWithTag:tag]を使用してタグを検索できます。再帰的に動作します。

  3. st3fanは、同時変更について非常に良い点を示しています。一般に、これを回避する良い方法は、「削除配列」に追加してから、removeObjectsInArrayを追加することです。

于 2010-01-26T05:19:55.633 に答える