测试已测试 | ✓ |
语言语言 | Obj-CObjective C |
许可证 | MIT |
发布最新发布 | 2015年6月 |
由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或添加的功能的适当测试。