ZSWHierarchicalResultsController 1.0

ZSWHierarchicalResultsController 1.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新发布2015年6月

Zachary West维护。



  • 作者
  • Zachary West

ZSWHierarchicalResultsController是NSFetchedResultsController的替代品。它不支持单个对象数组,而是每个对象显示一个部分,每个部分中有一个有序的对象集。

这个类既快速又经过充分测试,能够处理大量对象;主要的限制将是内存使用,控制器旨在将其保持尽可能低。

创建控制器

假设您试图按Day显示每个部分,这部分可以包含一定数量的Event

@interface Day : NSManagedObject
@property id sortKey;
@property NSOrderedSet *events;
@end

@interface Event : NSManagedObject
@property Day *day;
@end

您可以为显示每个天内的事件创建一个控制器

NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName:@"Day"];
req.predicate = [NSPredicate predicateWithFormat:@"sortKey != nil"];
req.sortDescriptors = @[ [NSSortDescriptor sortDescriptorWithKey:@"sortKey" ascending:YES] ];

controller = [[ZSWHierarchicalResultsController alloc]
                   initWithFetchRequest:req
                               childKey:@"objects"
                   managedObjectContext:context
                               delegate:self];

接收更新

委托回调类似于NSFetchedResultsController,但设计用于与UICollectionViews轻松结合使用。

- (void)hierarchicalController:(ZSWHierarchicalResultsController *)controller
  didUpdateWithDeletedSections:(NSIndexSet *)deletedSections
              insertedSections:(NSIndexSet *)insertedSections
                  deletedItems:(NSArray *)deletedIndexPaths
                 insertedItems:(NSArray *)insertedIndexPaths {
  [self.collectionView performBatchUpdates:^{
    if (deletedSections) {
      [self.collectionView deleteSections:deletedSections];
    }

    if (insertedSections) {
      [self.collectionView insertSections:insertedSections];
    }

    if (deletedIndexPaths) {
      [self.collectionView deleteItemsAtIndexPaths:deletedIndexPaths];
    }

    if (insertedIndexPaths) {
      [self.collectionView insertItemsAtIndexPaths:insertedIndexPaths];
    }
  } completion:^(BOOL finished) {

  }];
}

出于设计,此类不会发出"Update"通知。如果您想了解您的对象如何更改并在UI中更新,您应该设置KVO观察者。

单个父对象

您偶尔可能希望为单个对象显示控制器,例如在展开对象或显示编辑屏幕时。-[ZSWHierarchicalResultsController initWithParentObject:childKey:managedObjectContext:delegate:]使您更方便。

安装

ZSWHierarchicalResultsController通过CocoaPods提供。要安装它,只需将以下行添加到Podfile中

pod "ZSWHierarchicalResultsController", "~> 1.0"

许可证

ZSWHierarchicalResultsController在MIT许可证下提供。这个库在当时制作Heyday的过程中创建,Heyday允许将其开源。如果您通过pull request进行贡献,请包括修复您正在修复的bug或添加的功能的适当测试。