2012-01-05 10 views
0

私は、WWDC#2010のTableViewUpdatesの例を使用しています。基本的にアップルは、セクションヘッダーをクリックすると折りたたみ可能で拡張可能なTableViewを作成します。テーブルビューのデータはそうのようにviewWillAppearで作成されます:私は、私は多くのデータを持っている私の場合、ために気づいたUINavigationControllerを使用したデータキャッシング

- (void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    /* 
    Check whether the section info array has been created, and if so whether the section count still matches the current section count. In general, you need to keep the section info synchronized with the rows and section. If you support editing in the table view, you need to appropriately update the section info during editing operations. 
    */ 
    if ((self.sectionInfoArray == nil) || ([self.sectionInfoArray count] != [self numberOfSectionsInTableView:self.tableView])) { 

     // For each play, set up a corresponding SectionInfo object to contain the default height for each row. 
     NSMutableArray *infoArray = [[NSMutableArray alloc] init]; 

     for (Play *play in self.plays) { 

      SectionInfo *sectionInfo = [[SectionInfo alloc] init];   
      sectionInfo.play = play; 
      sectionInfo.open = NO; 

      NSNumber *defaultRowHeight = [NSNumber numberWithInteger:DEFAULT_ROW_HEIGHT]; 
      NSInteger countOfQuotations = [[sectionInfo.play quotations] count]; 
      for (NSInteger i = 0; i < countOfQuotations; i++) { 
       [sectionInfo insertObject:defaultRowHeight inRowHeightsAtIndex:i]; 
      } 

      [infoArray addObject:sectionInfo]; 
      [sectionInfo release]; 
     } 

     self.sectionInfoArray = infoArray; 
     [infoArray release]; 
    } 

} 

、これは高価な操作です。私はデータをキャッシュしたいと思います。データは、viewWillAppearに入ってから毎回作成されます。私はこのビューをスタックにプッシュするためにUINavigationControllerを使用しているので、viewDidLoadに配置すると、このビューから離れて家に帰ると、ビューを再作成しなければならず、viewDidLoadが再び実行され、もうすぐ遅くなります。

私は以前にデータをキャッシュしておらず、それを行うにはどうすれば良いのだろうと思っていましたか?現在、行ヘッダーと行のすべてのデータはデータベースに格納されています。このビューがスタックにプッシュされると、データを取得してテーブルを作成します。私は、テーブルを作成し、viewControllerの後続プッシュでより速く読み込むために、何らかの形でキャッシュまたはビューを作成するための良いメカニズムが何であるか分かりませんでした。ありがとう。

答えて

0

表示しているコードは、テーブルビュー用のデータソースを構築しており、ビューそのものではありません。ビューコントローラの初期化子でこのコードを実行したり、データソースで更新が必要なときはいつでも、あなたのニーズを満たすことはできませんか?

NSFetchedResultsControllerとそのデリゲートメソッドを使用して並列を描画できます。これらは、ビュー処理メソッドとは別に実行されます。フェッチされた結果コントローラは、ビューコントローラのivarまたは(たいていは)プロパティです。たとえば、フェッチされた結果コントローラがフェッチを完了すると、ケース・バイ・ケースで変更を管理し、テーブル・ビューおよびそのコントローラと調整したり、意図的に完全に再フェッチすることができます。ビューは、データソースの保守とは関係なく完全に表示され、完全に消滅します。

関連する問題