2

"[self.tableView reloadData]"で、UITableView に追加したばかりのデータの最新の行が表示されないのはなぜですか? (コードが含まれています) AddItem コントローラーからこのデリゲート メソッド I に戻った後です。

  • コア データ リポジトリを新しい値で更新する
  • 呼び出し: "[self.tableView reloadData]"
  • モーダル ビューを閉じる
  • しかし、UITableView に戻ると、新しい行はありませんか?
  • シミュレーターで iPhone アプリを停止して再起動すると、行が正しく表示されます

ここで「reloadData」が機能しないのはなぜですか?どうすればよいですか?

テーブルビューの「insertRowsAtIndexPaths」を介して手動で新しい行を作成するアプローチがあることを理解しています。どのアプローチが最適かはわかりませんが、いずれにしても reloadData がここで機能しない理由を理解したいと思います。

コード:

- (void)newItemController:(NewItemController *)controller didFinishWithSave:(BOOL)save newItemText:(NSString*)itemText 
{   
    // Add data to CoreData store
    WEView *newWEView = (WEView *) [NSEntityDescription insertNewObjectForEntityForName:@"WEView" inManagedObjectContext:managedObjectContext];
    newWEView.title = itemText;

    NSError *error = nil;
    if (![managedObjectContext save:&error]) {
        // Handle the error.
        DLog(@"ERROR DURING SAVE");
        abort();
    }

    // Dismiss the modal view to return to the main list
   [self dismissModalViewControllerAnimated:YES];

    // Reload Data
    [self.tableView reloadData];
}   

ありがとう

PS。これは、テーブルビュー データ インスタンス変数を設定するために使用するコードです。

- (void)updateTableDataViaCoreData 
{
    // Core Data Request
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"WEView" inManagedObjectContext:managedObjectContext];
    [request setEntity:entity];

    // CoreData Sort Descriptor
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];
    [sortDescriptors release];
    [sortDescriptor release];

    // Core Data - Execute Request
    NSError *error = nil;
    NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
    if (mutableFetchResults == nil) {
        // Handle the error.
        DLog(@"Error when fetching data");
        abort();
    }

    // Core Data finish Up
    [self setViewConfigArray:mutableFetchResults];
    [mutableFetchResults release];
    [request release];
}
4

3 に答える 3

4

あなたのコードサンプルから、テーブルビューのデータを管理する NSFetchedResultsController がある推奨の Core Data メソッドを使用したようです。その場合は、reloadData を呼び出す前に、テーブルビューの fetchedresultscontroller にデータを再フェッチするように指示する必要があります。

したがって、reloadData の前に、NSFetchedResultsController にデータを再フェッチするように指示します。

[[self frc] performFetch:&error];

オブジェクトを managedcontext に挿入しても、テーブルビューで使用できるようにはなりません。

于 2011-03-31T08:14:06.140 に答える
0

asでテーブルのリロードを呼び出す必要がありました

[classname.tableview reloadData];

それが役に立てば幸い.....

于 2011-03-31T09:04:16.813 に答える
0

ビュー コントローラーを閉じる前にデータの再読み込みを試みる

于 2011-03-31T08:06:43.953 に答える