-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Description
New issue checklist
- I have reviewed the
READMEand documentation - I have searched existing issues and this is not a duplicate
General information
IGListKitversion:- iOS version(s): 10.2
- CocoaPods/Carthage version: master
- Xcode version: 8.2
- Devices/Simulators affected:
- Reproducible in the demo project? (Yes/No): NO
- Related issues:
IGListStackedSectionController is incredibly useful for decomposing section controllers, but I'm running into an issue that appears to be a bug when one of the child section controllers has a variable number of cells, based on the object injected into it.
A child section controller's
func numberOfItems() -> Int
method is getting called before
func didUpdate(to object: Any)
That results in the section controller having to know how many items it contains BEFORE it has its data.
I tracked the issue down to the stacked section controller constructor calling it's reloadData method:
- (instancetype)initWithSectionControllers:(NSArray <IGListSectionController<IGListSectionType> *> *)sectionControllers {
if (self = [super init]) {
for (IGListSectionController<IGListSectionType> *sectionController in sectionControllers) {
sectionController.collectionContext = self;
sectionController.viewController = self.viewController;
}
_visibleSectionControllers = [[NSCountedSet alloc] init];
_sectionControllers = [NSOrderedSet orderedSetWithArray:sectionControllers];
self.displayDelegate = self;
self.scrollDelegate = self;
[self reloadData];
}
return self;
}
The reloadData method is asking its children for the number of items, but the children don't have their data injected yet.
I can easily workaround the issue by explicitly setting the data (i.e. view model in my case) on the child section controller when I build up stacked section controller, but that seems like a hack unless I'm missing something.
Let me know what you think. If you agree its a bug, I'd be happy to create a unit test and fix the issue, but I probably need a little guidance as to the appropriate fix.