質問

こんにちは、私は uiscrollview を持っており、uiscrollview 内に uiimageview のオブジェクトが 1 つあります。アプリを起動します。次に、スクロールビューで右にスクロールすると、スクロールビューが変わりますが、 (void)scrollViewDidEndDecelerated:(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 枚の画像を追加するとアプリがクラッシュするため、前のオブジェクトを削除しました。メモリを管理する必要があると思います。これが、前のオブジェクトを削除する理由です。

誰か助けてください!

役に立ちましたか?

解決

正しい方向に進むためのいくつかの提案:

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

  2. UIView の tag プロパティは、独自のループでのメンテナンスの問題を回避する場合に最適です。必要なときに UIImageView に特定のタグを設定し、[UIView viewWithTag:tag] を使用してタグを検索できます。再帰的に機能します。

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

他のヒント

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

何について:

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

?あなたがやろうとしている正確に何ということはないです
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top