Ios 核心数据:为什么需要NSFetchedResultsControllerDelegate?

Ios 核心数据:为什么需要NSFetchedResultsControllerDelegate?,ios,core-data,Ios,Core Data,据我所知,NSFetchedResultsController负责将数据从托管对象上下文同步到表视图控制器。代表在这里的角色是什么?我读了苹果的文档,但不明白。请简明扼要地阐述这个问题。简单的回答是,委托方法允许您在对NSFetchedResultsController(NSFRC)中的托管对象执行操作时,根据需要更新表视图 例如,如果删除NSFRC结果中的对象,则它可以通过删除相应的行来更新表 所以 在controllerWillChangeContent:中,最好告诉您的表视图您将要对其进

据我所知,NSFetchedResultsController负责将数据从托管对象上下文同步到表视图控制器。代表在这里的角色是什么?我读了苹果的文档,但不明白。请简明扼要地阐述这个问题。

简单的回答是,委托方法允许您在对NSFetchedResultsController(NSFRC)中的托管对象执行操作时,根据需要更新表视图

例如,如果删除NSFRC结果中的对象,则它可以通过删除相应的行来更新表

所以

  • controllerWillChangeContent:
    中,最好告诉您的表视图您将要对其进行更改(因此您应该在其上调用
    beginUpdates:

  • controller:didChangeObject:atIndexPath:forChangeType
    在托管对象更改(添加、删除、移动等)时调用。根据需要更新表视图(例如,如果删除了托管对象,则调用
    deleteRowsAtIndexPaths:withRowAnimation:

  • controller:didchangessection:atIndex:forChangeType
    与上述类似,但用于表视图部分

  • 更改完成后,将调用
    controllerDidChangeContent
    。在这个方法中完成也在您的表视图上调用
    endUpdates:


希望这能有所帮助。

简单的回答是,委托方法允许您在对NSFetchedResultsController(NSFRC)中的托管对象执行操作时,根据需要更新表视图

例如,如果删除NSFRC结果中的对象,则它可以通过删除相应的行来更新表

所以

  • controllerWillChangeContent:
    中,最好告诉您的表视图您将要对其进行更改(因此您应该在其上调用
    beginUpdates:

  • controller:didChangeObject:atIndexPath:forChangeType
    在托管对象更改(添加、删除、移动等)时调用。根据需要更新表视图(例如,如果删除了托管对象,则调用
    deleteRowsAtIndexPaths:withRowAnimation:

  • controller:didchangessection:atIndex:forChangeType
    与上述类似,但用于表视图部分

  • 更改完成后,将调用
    controllerDidChangeContent
    。在这个方法中完成也在您的表视图上调用
    endUpdates:


希望这能有所帮助。

为什么不将这些方法放在NSFetchedResultsConroller类中呢?为什么需要委托?对于NSFRC来说,当任何托管对象发生更改时,让委托知道是一种优雅的方式,这样您就可以对此执行操作。使它们成为类或实例方法是行不通的,因为这将假定您总是知道托管对象何时发生了更改。这不是唯一可以做到的方法。这里有一些想法:如果您想在这里使用类或实例方法,那么听起来您想自己控制托管对象。在这种情况下,您可以选择不使用NSFRC,这是完全有效的。不过,在我看来,尽管最初设置它很麻烦,但我确实发现它不仅消除了自己管理对象和表视图的一些痛苦,而且还增加了其他有用的行为。为什么不将这些方法放在NSFetchedResultsConroller类中呢?为什么需要委托?对于NSFRC来说,当任何托管对象发生更改时,让委托知道是一种优雅的方式,这样您就可以对此执行操作。使它们成为类或实例方法是行不通的,因为这将假定您总是知道托管对象何时发生了更改。这不是唯一可以做到的方法。这里有一些想法:如果您想在这里使用类或实例方法,那么听起来您想自己控制托管对象。在这种情况下,您可以选择不使用NSFRC,这是完全有效的。不过,在我看来,尽管最初设置它很麻烦,但我确实发现它不仅消除了自己管理对象和表视图的一些痛苦,而且还增加了其他有用的行为。