3


0

UIScrollViewからサブビューUIImageviewを削除します

こんにちは、uiscrollviewがあり、uiscrollview内にuiimageviewのオブジェクトが1つあります。 アプリを起動します。 次に、スクロールビューで右にスクロールするとスクロールビューが変更されますが、次で追加するuiimageviewオブジェクトを見ることができません-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView。 次のオブジェクトを追加する前に、前のオブジェクトを削除します…​何が問題ですか?

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

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;

        }
    }

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

[scroll addSubview:imageView];

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

誰でも助けてください!

2 Answer


2


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

どうですか?

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

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


2


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

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

  2. UIViewのtagプロパティは、回避しようとする場合の親友です 独自のループの問題を維持します。 必要なときにUIImageViewに特定のタグを設定し、次に使用してタグを検索できます [UIView viewWithTag:tag]; It works recursively.

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