From 472e18b917605a5e6b3dbc1bedfd485e218d6e42 Mon Sep 17 00:00:00 2001 From: Kevin Farst Date: Tue, 18 Jul 2017 21:51:39 -0700 Subject: [PATCH] Allow YLTableViewCell conforming classes to be unregistered --- Classes/YLTableView.m | 3 ++- YLTableViewTests/YLTableViewDataSourceTests.m | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Classes/YLTableView.m b/Classes/YLTableView.m index c60b0a3..e677ef5 100644 --- a/Classes/YLTableView.m +++ b/Classes/YLTableView.m @@ -45,11 +45,12 @@ - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style { - (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier { NSAssert(identifier, @"Must have a reuse identifier."); - NSAssert([cellClass conformsToProtocol:@protocol(YLTableViewCell)], @"You can only use cells conforming to YLTableViewCell."); [super registerClass:cellClass forCellReuseIdentifier:identifier]; if (cellClass) { + NSAssert([cellClass conformsToProtocol:@protocol(YLTableViewCell)], @"You can only use cells conforming to YLTableViewCell."); + self.cellClassForReuseIdentifier[identifier] = cellClass; } else { [self.cellClassForReuseIdentifier removeObjectForKey:identifier]; diff --git a/YLTableViewTests/YLTableViewDataSourceTests.m b/YLTableViewTests/YLTableViewDataSourceTests.m index c9af340..f26f89f 100644 --- a/YLTableViewTests/YLTableViewDataSourceTests.m +++ b/YLTableViewTests/YLTableViewDataSourceTests.m @@ -76,6 +76,16 @@ - (void)testNonConformingCell { XCTAssertThrows([self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"]); } +- (void)testUnregistereredTableCell { + NSString *const kUnregisteredReuseIdentifier = @"UnregisteredClass-ReuseId"; + + [self.tableView registerClass:[YLTableViewCellTestStub class] forCellReuseIdentifier:kUnregisteredReuseIdentifier]; + XCTAssertNotNil([self.tableView dequeueReusableCellWithIdentifier:kUnregisteredReuseIdentifier]); + + [self.tableView registerClass:nil forCellReuseIdentifier:kUnregisteredReuseIdentifier]; + XCTAssertNil([self.tableView dequeueReusableCellWithIdentifier:kUnregisteredReuseIdentifier]); +} + - (void)testEstimatedRowHeightOverride { self.dataSource.shouldOverrideEstimatedRowHeight = YES; CGFloat height = [self.dataSource tableView:self.tableView estimatedHeightForRowAtIndexPath:[self _indexPathForCustomReuseIdentifier]];