2

iPhone アプリに three20 プロジェクトを使用しています。問題を絞り込んで、プロジェクトに付属する「テーブル内の Web イメージ」の例を再作成しようとしています。プロジェクトとまったく同じようにコードをコピーしましたが、TTNavigator を使用していないこと (例では使用しています) を除いて、TTTableViewController を手動でタブバーに追加しています。

問題は次のとおりです。例のように、テーブル内の画像は Web から自動的に読み込まれます。しかし、テーブルを上下にスクロールした後にのみロードされます。

コンソールには、画像をダウンロードしているとはっきりと表示され、アクティビティ インジケーターが永遠に回転していることがわかります。一度上下にスクロールしない限り、画像は表示されません。

誰?前もって感謝します。

PS: このコードを任意のランダムな UIView で使用している場合、これも機能しません (黒い四角のみが表示されます)。

TTImageView* imageView = [[[TTImageView alloc] initWithFrame:CGRectMake(30, 30, 100, 100)] autorelease];
imageView.autoresizesToImage = YES;
imageView.URL = @"http://webpimp.nl/logo.png";
[self.view addSubview:imageView];

このコードを AppDelegate (ウィンドウのすぐ上) に配置すると、機能します.. 奇妙ですか?

考えられる解決策: この目的で TTImageView を使用するのをやめましたが、問題が何であるかがわかったと思います。スレッド化(したがって、Deniz Mert Edincik の回答を受け入れます)。メインスレッド以外のどこからでも非同期ダウンロードを開始した場合(基本的にTTImageViewがすべて非同期ダウンロードであるため)、開始しません。メインスレッドでダウンロードを開始すると、すぐに開始されます..

4

6 に答える 6

5

私にはスレッドの問題のように聞こえますが、メインのランループで TTImageView を作成していますか?

于 2009-09-14T19:38:35.083 に答える
1

一つ面白いことを見つけました。TTTableViewController、TTTableViewDataSource、および TTModel の組み合わせを使用すると、TTImageView の読み込みで同じ問題が発生します。私の問題は、モデルのメソッド「isLoading」と「isLoaded」の実装が、モデルの初期化後に適切な値を返さないことでした。これにより、「viewDidAppear」メソッドで手動でモデルのリロードを呼び出す必要があり、画像の読み込みの問題が発生します。そこで、「isLoading」メソッドと「isLoaded」メソッドを修復して、モデルの初期化後に両方とも「NO」を返すようにしました。すべて問題ありません。

于 2010-02-25T21:46:26.403 に答える
0

画像ビューが Web から独自の画像をロードする、これに似たものを書きました。

私の経験では、画像が正常に読み込まれたがビューに表示されなかった場合、セルに再描画を指示する必要がありました。

テーブル ビューをスクロールすると、セルが画面に表示されたときにセルが再描画されるように設定されているため、スクロールするとセルが表示されます。

画像が読み込まれたら、setNeedsDisplay というメッセージを送信して、画像が再描画されることをセルに伝えます。

そうすれば、画像のダウンロードが完了すると、そのセル (およびそのセルのみ) が再描画され、新しい画像が表示されます。

セル全体を再描画する必要がなく、同じメソッド呼び出しを使用して画像ビューを再描画するだけで済む可能性があります。私の経験では、テーブル セルのビュー階層がフラット化されたため、セル全体を再描画する必要がありました。

于 2009-07-14T19:18:44.767 に答える
0

これはスレッドの問題です。次の行を含めることで、画像をロードできます。

[TTURLRequestQueue mainQueue].suspended = NO;

- (void)didLoadModel:(BOOL)firstTime

于 2012-03-28T11:29:29.060 に答える
0

画像の読み込みが完了したら、reloadData メッセージをテーブル ビューに送信してみてください。これにより、テーブルで行のサイズが再計算され、テーブルが再描画されます。このメッセージに応答して画像のダウンロードを再開しないように注意してください。

于 2009-07-14T14:27:32.310 に答える
0

あなたが何をしたいのかについての答えはありませんが、これは機能と見なされ、期待される動作であると言えます。画像の遅延読み込みを行う場合は、UITableView で TTImageView を使用します。TTImageView は、フレームが画面に表示されている画像のみを読み込みます。このように、デバイスはネットワーク リソースを使用して、ユーザーが見ようとさえしていない一連の画像ではなく、ユーザーが目の前に持っている画像をダウンロードします。

数百のサムネイル画像を含む長いリスト (友達のリストなど) を用意することを検討してください。古いデバイスで 100 以上の画像リクエストを開始すると、メモリ使用量が急増し、アプリがクラッシュする可能性が高いことを経験から知っています。TTImageView はこの問題を解決します。

于 2010-06-30T14:50:12.680 に答える