2011-01-17 15 views
0


私はカスタム値と画像を持つテーブルビューを使用します。このテーブルビュー行を高速化するにはどうすればよいですか?

すべての行は、この行います
- wordpressのXML
を解析 - - "木、2011年1月13日夜10時26分27秒0000" この文字列を分割して取得するデバイス(iphone/ipadの)
をチェックしますpos [1]とpos [2]である。
- "Gennaio" で
を "月" を変換する - 行のセル内の設定値

それは、このように作るのです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {  
    @try { 
     newsRow = ((NewsRowController *)[tableView dequeueReusableCellWithIdentifier:@"cell"]); 
     if (newsRow == nil) { 

      if ([[Device GetModel] isEqualToString:@"iPad Simulator"] || [[Device GetModel] isEqualToString:@"iPad"]) 
       [[NSBundle mainBundle] loadNibNamed:@"NewsRow_ipad" owner:self options:nil]; 
      else [[NSBundle mainBundle] loadNibNamed:@"NewsRow" owner:self options:nil]; 

      if ([tableArray count] > 0) {    
       NSArray *chunks = [[dataArray objectAtIndex:indexPath.row] componentsSeparatedByString: @" "]; 

       [newsRow setCellDataWithName:[tableArray objectAtIndex:indexPath.row] 
            andDate:[descArray objectAtIndex:indexPath.row] 
             day:[chunks objectAtIndex:1] 
             month:[self convertMonthToExtended:[chunks objectAtIndex:2]]]; 
      } 
     }  
    } 
    @catch (NSException * e) { 
     NSLog(@"OK, crashato. Sappiamo il perchè!"); 
    } 

    return newsRow; 
} 

は、関数がこれを行うconvertMonthToExtended:

if ([small isEqualToString:@"Jan"]) return @"gennaio"; 
[...] 
if ([small isEqualToString:@"Dec"]) return @"dicembre"; 

それは非常にうまく動作しますが、シミュレータ上では特に3Gデバイス、私はテーブルをスクロールするときに私は多くのことをするのでゆっくりとスクロールします。

どうすればスクロール速度を上げる
この機能を再実装する正しい方法はです。
このスニペットを最適化するにはどうすればよいですか?

どうぞよろしくお願いします。

おかげで、私は計算をやって、それはのUITableViewをバックアップするために使用される中間データストアにチャンクにこの情報バッチ処理へのより良いアプローチだと考えていると思います

答えて

1

は、私はあなたが以下のコードを動かすことができると思います行に)。そして、このコードをviewDidLoadに入れることができます。

すべての計算と非同期ネットワークの作業をお勧めします。 すべての操作がテーブルビューに入力された後にのみ、行を移入してそのようなNSArrayにUIProgressViewなどを表示しながら保存する必要があるすべての情報を事前に計算できます。 [Tableview reloadData]メソッドを使用して、テーブルビュー内のすべてのデータをリロードすることができます。つまり、numberOfSectionsInTableView:tableView:numberOfRowsInSection:、およびすべてのデータソースメソッドが呼び出されます。

+0

+1 lucaに感謝します。私はそれが好きです。 – elp

1

セル自体の中で、あなたが描写している問題を引き起こしているのです。 (処理の時間によっては、データを整理している間にUIActivityIndicatorViewを表示することをお勧めします)。

このようにすると、おそらく、すべての行のXMLデータを個別に処理する必要がなくなりますこれは生の処理の観点からはそれほど高速ではないかもしれないが、おそらく重要な問題であると考えられるユーザーの視点から、少なくとも早く感じるだろう。あなたは、デバイスがラインから変更されません(行ごとにこのチェックを行う必要はありませんので方法:のtableView外

if ([[Device GetModel] isEqualToString:@"iPad Simulator"] || [[Device GetModel] isEqualToString:@"iPad"]) 
       [[NSBundle mainBundle] loadNibNamed:@"NewsRow_ipad" owner:self options:nil]; 
      else [[NSBundle mainBundle] loadNibNamed:@"NewsRow" owner:self options:nil]; 

:cellForRowAtIndexPath

関連する問題