1

Xcode プロジェクトに 2 つの for ループがあり、9 つの UIImageView で画像を変更するために使用しています。これらの UIImageViews 内の画像は、サーバーからダウンロードされてから表示されます。

私の for ループは、3 つの異なる整数を使用して、どの画像を表示するかを決定します。next、current_photo、previous は整数です。

次と前の画像セットの表示を制御する 2 つの UIButtons があります。

次の一連の画像を表示する場合は、次の for ループを作成して使用します。

NSArray *imageViews = @[picview_1, picview_2, picview_3, picview_4, picview_5, picview_6, picview_7, picview_8, picview_9];

        for (next = current_photo; next < (current_photo+9); next++) {
            NSString *next_set = [NSString stringWithFormat:@"%@%i.%@", SERVER_URL, next+1, FORMAT_TYPE];
            NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString: next_set]];
            UIImage *image = [[UIImage alloc] initWithData:imageData];
            [[imageViews objectAtIndex:(next-9)] setImage:image];
        }

        current_photo = next;

このforループは完全に機能し、9つのUIImagesViewsすべてが画像を変更します。

ただし、9 つの UIImageViews で以前の画像セットを表示したい場合、次の for ループは何らかの理由で正しく機能しません。

NSArray *imageViews = @[picview_1, picview_2, picview_3, picview_4, picview_5, picview_6, picview_7, picview_8, picview_9];

        for (previous = current_photo; previous > (previous-9); previous--) {
            NSString *next_set = [NSString stringWithFormat:@"%@%i.%@", SERVER_URL, previous+1, FORMAT_TYPE];
            NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString: next_set]];
            UIImage *image = [[UIImage alloc] initWithData:imageData];
            [[imageViews objectAtIndex:(previous-previous)] setImage:image];
        }

        current_photo = previous;

for ループの何が問題になっていますか? 説明してください。

以下は、私のアプリを開いたときに何が起こるかです: 開いたアプリ

次のボタンを押すと、次のようになります。

次

最後に、戻るボタンを押すと、アプリがフリーズします.....

なんで?どうしたの?助けてください。

御時間ありがとうございます :)

4

1 に答える 1

1

一例を挙げると:

[[imageViews objectAtIndex:(previous-previous)] setImage:image];

常に[0]に画像を設定し、他のどれにも何も設定されていません。

また

(previous = current_photo; previous > (previous-9); previous--) 

永遠にループします!以前の--、いつ停止するかを知るために比較しているものを実行するたびに、以前の-9も1つ下がります。

私はこれをお勧めします:

for (previous = current_photo; previous > (current_photo-9); previous--) {
    NSString *next_set = [NSString stringWithFormat:@"%@%i.%@", SERVER_URL, previous+1, FORMAT_TYPE];
    NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString: next_set]];
    UIImage *image = [[UIImage alloc] initWithData:imageData];
    [[imageViews objectAtIndex:(8 - (current_photo - previous))] setImage:image];
}
于 2013-07-27T16:27:45.103 に答える