• ブログ
  • Photoshare
  • キーワード
  • ブックマーク
  • ふぉとす
  • 写真
  • ログイン

kaeruspoon

« 携帯写真を気軽にアップできるサイト「ふぉとす」を作りました | 今週のおやすみでやったこと »
  • 【iPhone】スレッド中で[UITableView reloadData]を使ってはいけない 2008-11-06 23:38:05 Append 628

    iPhoneアプリでスレッドを使うとき、スレッド中でUITableView reloadDataを実行するとおかしなことになります。これはスレッドセーフではないからです。
    UITableViewCellで画像を外部から持ってくるときは非同期なりスレッドなりを使うと思いますが、画像取得後にUITableView reloadDataで更新しようとしてこの現象に出会いました。

    リンゴの水やり:performSelectorOnMainThread:... - livedoor Blog(ブログ)

    この記事にあるように、スレッド中でperformSelectorOnMainThread:withObject:waitUntilDone:modes:メソッドを使用してメインスレッド上で実行するようにしてあげれば解決できます。

    ImageCache.m - 画像取得用ライブラリ

    - (void) imageCache:(NSString*)url { // NSThreadでデタッチされるメソッド
        NSAutoreleasePool* pool;
        pool = [[NSAutoreleasePool alloc]init];
    
        NSData *data = .... // 画像データの取得処理
    
        if ([delegate respondsToSelector:@selector(imageCacheFinished)]) {
            [delegate performSelectorOnMainThread:@selector(imageCacheFinished) withObject:nil waitUntilDone:YES];
        }
    
        [pool release];
        [NSThread exit];
    }
    


    TableViewDelegate.m - TableViewのデリゲート

    - (void) imageCacheFinished {
        [self.tableView reloadData];
    }
    


    こんな感じ。

    Commentコメント(0) Pageリンク元(1499)
« 携帯写真を気軽にアップできるサイト「ふぉとす」を作りました | 今週のおやすみでやったこと »

プロフィール

おおいしつかさ

過去の記事

2006年
12月
2007年
1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2008年
1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2009年
1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2010年
1月 2月 3月

キーワード一覧

ActionScript Ajax AmazonResources Erlang git github iPhone javascript Javascript Kaerukeyword kaeruspoon Mac merb milook MiyazakiResistance NSR Objective-C perl Perl Rails Ruby Ruby on Rails RubyKaigi speedpetal subversion Thin Thinkpad tokyobike TRPG twitter ubuntu Ubuntu VAIO VAIO typeZ Waves WordScoop Xen ぐりぐり しろさん カンタロー スノボー ドトール ドライブ バイク プログラミング ユルさん 執筆 宮崎 日本酒 模型 猫 町田 真中洋嗣 自転車
Baner