1

ここで少し苦労しています...

私のViewControllerは次のプロトコルに準拠しています

私のinitメソッドでは、リモートサーバーをチェックして更新されたXMLファイルを取得します... XMLファイルを解析し、その内容をCoreDataに書き込みます。

私のテーブルビューのコンテンツは、このコアデータを表示するNSFetchedResultsControllerで管理されています。

私の問題:

NSFetchedResultsControllerは、リモートファイルからコアデータの更新が行われる前にデータを取得しているようです。データベースが適切に更新されていることを確認しました。2回目に実行すると、TableViewに正しいデータが表示されます。

たぶん私は適切な場所でreloadDataを行っていないだけですか?実装しました

-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    [myTableView reloadData];
}

また、パーサーが完了し、新しいデータがコアデータに書き込まれた後、私はこれを試しています。

-(void)parserDidEndDocument:(NSXMLParser *)parser {
     [myTableView reloadData];  
}

誰かアイデアはありますか?投稿するのに役立つ追加のコードを教えてください。ありがとう!

4

1 に答える 1

1

あなたは以下をチェックしたいかもしれません(Appleのドキュメントから)

したがって、コントローラーには、デリゲートがあるかどうか、およびキャッシュファイル名が設定されているかどうかによって決定される3つの動作モードがあります。

  1. 追跡なし:デリゲートはnilに設定されます。コントローラは、フェッチが実行されたときのデータへのアクセスを提供するだけです。

  2. メモリのみの追跡:デリゲートはnil以外であり、ファイルキャッシュ名はnilに設定されています。コントローラは、結果セット内のオブジェクトを監視し、関連する変更に応じてセクションと注文情報を更新します。

  3. 完全な永続的追跡:デリゲートとファイルキャッシュ名はnilではありません。コントローラは、結果セット内のオブジェクトを監視し、関連する変更に応じてセクションと注文情報を更新します。コントローラは、計算結果の永続的なキャッシュを維持します。

完全な永続的な追跡が必要なようです。したがって、デリゲートが設定されていることを確認し(おそらくすでに実行済み)、キャッシュを非nilに設定する必要があります。

解析が完了したら、managedObjectContextを保存していることを確認することもできます。保存後、必ず再度フェッチを行ってください。

NSError *error;
BOOL success = [controller performFetch:&error];
if (!success)
  NSLog(@"Core Data Fetch Error:  %@"error);

アプリが終了時にコンテキストを保存している可能性があります。そのため、再起動時にデータが表示されます。

幸運を

于 2012-05-04T15:25:32.787 に答える