1

私のアプリには、NSFetchedResultsControllerのデリゲートであるviewcontrollerと、UITableViewのデリゲートおよびデータソースがあります。

ナビゲーションコントローラーの追加ボタンを押すと、次のビューが正しく押され、新しいPersonエンティティを正しく追加できます。

私の問題は、追加ボタンが押されたときに、新しいビューが押されたときに空白の行がtableViewに追加され、新しいエンティティレコードが正しく作成された後もそこに残っていることです

これは、追加ボタンのターゲットアクションです。

- (void)addPerson:(id)sender
{
    AddPersonViewController *addPersonController = [[AddPersonViewController alloc] initWithNibName:@"AddPersonViewController" bundle:nil];

    [addPersonController setPerson:[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.managedObjectContext]];

    [self.navigationController pushViewController:addPersonController animated:YES];
}

(NSFetchedResultsControllerDelegateのアップルドキュメントから)空白行を作成するコードは次のとおりです。

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
       atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
      newIndexPath:(NSIndexPath *)newIndexPath {

    UITableView *tableView = self.tableView;

    switch(type) {

        case NSFetchedResultsChangeInsert:
            [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
                             withRowAnimation:UITableViewRowAnimationFade];
            break;

        case NSFetchedResultsChangeDelete:
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                             withRowAnimation:UITableViewRowAnimationFade];
            break;

        case NSFetchedResultsChangeUpdate:
            [self configureCell:[tableView cellForRowAtIndexPath:indexPath]
                    atIndexPath:indexPath];
            break;

        case NSFetchedResultsChangeMove:
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                             withRowAnimation:UITableViewRowAnimationFade];
            [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
                             withRowAnimation:UITableViewRowAnimationFade];
            break;
    }
}

この空白行の作成を停止する方法はありますか?

4

1 に答える 1

1

呼び出し

[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.managedObjectContext]

inaddPersonは、新しいPersonオブジェクトを作成し、それを管理対象オブジェクトコンテキストに追加します。テーブルビューのフェッチされた結果コントローラーがすべてのPersonオブジェクトを取得するように構成されている場合、これにより、この新しいオブジェクトの新しい(空白の)テーブル行が作成されます。

あなたの仕事の仕方がわかりませんAddPersonViewController。を介して指定されたオブジェクトを変更する場合はsetPerson、テーブルの行を更新する必要があります。新しいPersonオブジェクトを作成する場合、最初の(空白の)エントリは残ります。

おそらく、オブジェクトを実際に作成してデータを取り込むためのすべてのデータが揃うまで、新しいPersonオブジェクトの作成を遅らせる必要があります。これを行うには、呼び出しをにAddPersonViewController移動するか、テーブルビューコントローラーでから呼び出されるデリゲートメソッドを使用します。insertNewObjectForEntityForName:AddPersonViewControllerAddPersonViewController

于 2012-10-13T10:31:21.413 に答える