diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0c3f59308..bed6aaa4b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,13 @@
The changelog for `IGListKit`. Also see the [releases](https://github.com/instagram/IGListKit/releases) on GitHub.
+3.1.1
+-----
+
+### Fixes
+
+- Prevent a crash when `IGListBindingSectionControllerDelegate` objects do not implement the optional deselection API. [Ryan Nystrom](https://github.com/rnystrom) [(#921)](https://github.com/Instagram/IGListKit/pull/921)
+
3.1.0
-----
diff --git a/Examples/Examples-iOS/Podfile.lock b/Examples/Examples-iOS/Podfile.lock
index 908880a7c..55bdfad95 100644
--- a/Examples/Examples-iOS/Podfile.lock
+++ b/Examples/Examples-iOS/Podfile.lock
@@ -1,9 +1,9 @@
PODS:
- - IGListKit (3.1.0):
- - IGListKit/Default (= 3.1.0)
- - IGListKit/Default (3.1.0):
+ - IGListKit (3.1.1):
+ - IGListKit/Default (= 3.1.1)
+ - IGListKit/Default (3.1.1):
- IGListKit/Diffing
- - IGListKit/Diffing (3.1.0)
+ - IGListKit/Diffing (3.1.1)
DEPENDENCIES:
- IGListKit (from `../../IGListKit.podspec`)
@@ -13,7 +13,7 @@ EXTERNAL SOURCES:
:path: ../../IGListKit.podspec
SPEC CHECKSUMS:
- IGListKit: 5065cb595903016ca42ed52fc0f9cd3b13170bff
+ IGListKit: cb97f405ae43e59fe1da74271e19427ec20d3c07
PODFILE CHECKSUM: 0d505f6895c1f8c0016d78680f9b532c444cbb5e
diff --git a/Examples/Examples-iOS/Pods/Local Podspecs/IGListKit.podspec.json b/Examples/Examples-iOS/Pods/Local Podspecs/IGListKit.podspec.json
index 2c35f29d6..3525ee592 100644
--- a/Examples/Examples-iOS/Pods/Local Podspecs/IGListKit.podspec.json
+++ b/Examples/Examples-iOS/Pods/Local Podspecs/IGListKit.podspec.json
@@ -1,6 +1,6 @@
{
"name": "IGListKit",
- "version": "3.1.0",
+ "version": "3.1.1",
"summary": "A data-driven UICollectionView framework.",
"homepage": "https://github.com/Instagram/IGListKit",
"documentation_url": "https://instagram.github.io/IGListKit",
@@ -12,7 +12,7 @@
"social_media_url": "https://twitter.com/fbOpenSource",
"source": {
"git": "https://github.com/Instagram/IGListKit.git",
- "tag": "3.1.0",
+ "tag": "3.1.1",
"branch": "stable"
},
"default_subspecs": "Default",
diff --git a/Examples/Examples-iOS/Pods/Manifest.lock b/Examples/Examples-iOS/Pods/Manifest.lock
index 908880a7c..55bdfad95 100644
--- a/Examples/Examples-iOS/Pods/Manifest.lock
+++ b/Examples/Examples-iOS/Pods/Manifest.lock
@@ -1,9 +1,9 @@
PODS:
- - IGListKit (3.1.0):
- - IGListKit/Default (= 3.1.0)
- - IGListKit/Default (3.1.0):
+ - IGListKit (3.1.1):
+ - IGListKit/Default (= 3.1.1)
+ - IGListKit/Default (3.1.1):
- IGListKit/Diffing
- - IGListKit/Diffing (3.1.0)
+ - IGListKit/Diffing (3.1.1)
DEPENDENCIES:
- IGListKit (from `../../IGListKit.podspec`)
@@ -13,7 +13,7 @@ EXTERNAL SOURCES:
:path: ../../IGListKit.podspec
SPEC CHECKSUMS:
- IGListKit: 5065cb595903016ca42ed52fc0f9cd3b13170bff
+ IGListKit: cb97f405ae43e59fe1da74271e19427ec20d3c07
PODFILE CHECKSUM: 0d505f6895c1f8c0016d78680f9b532c444cbb5e
diff --git a/Examples/Examples-iOS/Pods/Target Support Files/IGListKit/Info.plist b/Examples/Examples-iOS/Pods/Target Support Files/IGListKit/Info.plist
index 90db36aa4..793d31a9f 100644
--- a/Examples/Examples-iOS/Pods/Target Support Files/IGListKit/Info.plist
+++ b/Examples/Examples-iOS/Pods/Target Support Files/IGListKit/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
FMWK
CFBundleShortVersionString
- 3.1.0
+ 3.1.1
CFBundleSignature
????
CFBundleVersion
diff --git a/Examples/Examples-macOS/Podfile.lock b/Examples/Examples-macOS/Podfile.lock
index 845dd3ced..7109961db 100644
--- a/Examples/Examples-macOS/Podfile.lock
+++ b/Examples/Examples-macOS/Podfile.lock
@@ -1,9 +1,9 @@
PODS:
- - IGListKit (3.1.0):
- - IGListKit/Default (= 3.1.0)
- - IGListKit/Default (3.1.0):
+ - IGListKit (3.1.1):
+ - IGListKit/Default (= 3.1.1)
+ - IGListKit/Default (3.1.1):
- IGListKit/Diffing
- - IGListKit/Diffing (3.1.0)
+ - IGListKit/Diffing (3.1.1)
DEPENDENCIES:
- IGListKit (from `../../IGListKit.podspec`)
@@ -13,7 +13,7 @@ EXTERNAL SOURCES:
:path: ../../IGListKit.podspec
SPEC CHECKSUMS:
- IGListKit: 5065cb595903016ca42ed52fc0f9cd3b13170bff
+ IGListKit: cb97f405ae43e59fe1da74271e19427ec20d3c07
PODFILE CHECKSUM: bbe5708b3a7f2dd7c70bb14225a7e37f67e1de58
diff --git a/Examples/Examples-macOS/Pods/Local Podspecs/IGListKit.podspec.json b/Examples/Examples-macOS/Pods/Local Podspecs/IGListKit.podspec.json
index 2c35f29d6..3525ee592 100644
--- a/Examples/Examples-macOS/Pods/Local Podspecs/IGListKit.podspec.json
+++ b/Examples/Examples-macOS/Pods/Local Podspecs/IGListKit.podspec.json
@@ -1,6 +1,6 @@
{
"name": "IGListKit",
- "version": "3.1.0",
+ "version": "3.1.1",
"summary": "A data-driven UICollectionView framework.",
"homepage": "https://github.com/Instagram/IGListKit",
"documentation_url": "https://instagram.github.io/IGListKit",
@@ -12,7 +12,7 @@
"social_media_url": "https://twitter.com/fbOpenSource",
"source": {
"git": "https://github.com/Instagram/IGListKit.git",
- "tag": "3.1.0",
+ "tag": "3.1.1",
"branch": "stable"
},
"default_subspecs": "Default",
diff --git a/Examples/Examples-macOS/Pods/Manifest.lock b/Examples/Examples-macOS/Pods/Manifest.lock
index 845dd3ced..7109961db 100644
--- a/Examples/Examples-macOS/Pods/Manifest.lock
+++ b/Examples/Examples-macOS/Pods/Manifest.lock
@@ -1,9 +1,9 @@
PODS:
- - IGListKit (3.1.0):
- - IGListKit/Default (= 3.1.0)
- - IGListKit/Default (3.1.0):
+ - IGListKit (3.1.1):
+ - IGListKit/Default (= 3.1.1)
+ - IGListKit/Default (3.1.1):
- IGListKit/Diffing
- - IGListKit/Diffing (3.1.0)
+ - IGListKit/Diffing (3.1.1)
DEPENDENCIES:
- IGListKit (from `../../IGListKit.podspec`)
@@ -13,7 +13,7 @@ EXTERNAL SOURCES:
:path: ../../IGListKit.podspec
SPEC CHECKSUMS:
- IGListKit: 5065cb595903016ca42ed52fc0f9cd3b13170bff
+ IGListKit: cb97f405ae43e59fe1da74271e19427ec20d3c07
PODFILE CHECKSUM: bbe5708b3a7f2dd7c70bb14225a7e37f67e1de58
diff --git a/Examples/Examples-macOS/Pods/Target Support Files/IGListKit/Info.plist b/Examples/Examples-macOS/Pods/Target Support Files/IGListKit/Info.plist
index 90db36aa4..793d31a9f 100644
--- a/Examples/Examples-macOS/Pods/Target Support Files/IGListKit/Info.plist
+++ b/Examples/Examples-macOS/Pods/Target Support Files/IGListKit/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
FMWK
CFBundleShortVersionString
- 3.1.0
+ 3.1.1
CFBundleSignature
????
CFBundleVersion
diff --git a/Examples/Examples-tvOS/Podfile.lock b/Examples/Examples-tvOS/Podfile.lock
index 0047935c2..292164fbe 100644
--- a/Examples/Examples-tvOS/Podfile.lock
+++ b/Examples/Examples-tvOS/Podfile.lock
@@ -1,9 +1,9 @@
PODS:
- - IGListKit (3.1.0):
- - IGListKit/Default (= 3.1.0)
- - IGListKit/Default (3.1.0):
+ - IGListKit (3.1.1):
+ - IGListKit/Default (= 3.1.1)
+ - IGListKit/Default (3.1.1):
- IGListKit/Diffing
- - IGListKit/Diffing (3.1.0)
+ - IGListKit/Diffing (3.1.1)
DEPENDENCIES:
- IGListKit (from `../../IGListKit.podspec`)
@@ -13,7 +13,7 @@ EXTERNAL SOURCES:
:path: ../../IGListKit.podspec
SPEC CHECKSUMS:
- IGListKit: 5065cb595903016ca42ed52fc0f9cd3b13170bff
+ IGListKit: cb97f405ae43e59fe1da74271e19427ec20d3c07
PODFILE CHECKSUM: f68cec0d93efa38d42ede50dfe01309d83664d56
diff --git a/Examples/Examples-tvOS/Pods/Local Podspecs/IGListKit.podspec.json b/Examples/Examples-tvOS/Pods/Local Podspecs/IGListKit.podspec.json
index 2c35f29d6..3525ee592 100644
--- a/Examples/Examples-tvOS/Pods/Local Podspecs/IGListKit.podspec.json
+++ b/Examples/Examples-tvOS/Pods/Local Podspecs/IGListKit.podspec.json
@@ -1,6 +1,6 @@
{
"name": "IGListKit",
- "version": "3.1.0",
+ "version": "3.1.1",
"summary": "A data-driven UICollectionView framework.",
"homepage": "https://github.com/Instagram/IGListKit",
"documentation_url": "https://instagram.github.io/IGListKit",
@@ -12,7 +12,7 @@
"social_media_url": "https://twitter.com/fbOpenSource",
"source": {
"git": "https://github.com/Instagram/IGListKit.git",
- "tag": "3.1.0",
+ "tag": "3.1.1",
"branch": "stable"
},
"default_subspecs": "Default",
diff --git a/Examples/Examples-tvOS/Pods/Manifest.lock b/Examples/Examples-tvOS/Pods/Manifest.lock
index 0047935c2..292164fbe 100644
--- a/Examples/Examples-tvOS/Pods/Manifest.lock
+++ b/Examples/Examples-tvOS/Pods/Manifest.lock
@@ -1,9 +1,9 @@
PODS:
- - IGListKit (3.1.0):
- - IGListKit/Default (= 3.1.0)
- - IGListKit/Default (3.1.0):
+ - IGListKit (3.1.1):
+ - IGListKit/Default (= 3.1.1)
+ - IGListKit/Default (3.1.1):
- IGListKit/Diffing
- - IGListKit/Diffing (3.1.0)
+ - IGListKit/Diffing (3.1.1)
DEPENDENCIES:
- IGListKit (from `../../IGListKit.podspec`)
@@ -13,7 +13,7 @@ EXTERNAL SOURCES:
:path: ../../IGListKit.podspec
SPEC CHECKSUMS:
- IGListKit: 5065cb595903016ca42ed52fc0f9cd3b13170bff
+ IGListKit: cb97f405ae43e59fe1da74271e19427ec20d3c07
PODFILE CHECKSUM: f68cec0d93efa38d42ede50dfe01309d83664d56
diff --git a/Examples/Examples-tvOS/Pods/Target Support Files/IGListKit/Info.plist b/Examples/Examples-tvOS/Pods/Target Support Files/IGListKit/Info.plist
index 90db36aa4..793d31a9f 100644
--- a/Examples/Examples-tvOS/Pods/Target Support Files/IGListKit/Info.plist
+++ b/Examples/Examples-tvOS/Pods/Target Support Files/IGListKit/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
FMWK
CFBundleShortVersionString
- 3.1.0
+ 3.1.1
CFBundleSignature
????
CFBundleVersion
diff --git a/IGListKit.podspec b/IGListKit.podspec
index a13a88d2d..81b4c1c23 100644
--- a/IGListKit.podspec
+++ b/IGListKit.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'IGListKit'
- s.version = '3.1.0'
+ s.version = '3.1.1'
s.summary = 'A data-driven UICollectionView framework.'
s.homepage = 'https://github.com/Instagram/IGListKit'
s.documentation_url = 'https://instagram.github.io/IGListKit'
diff --git a/IGListKit.xcodeproj/project.pbxproj b/IGListKit.xcodeproj/project.pbxproj
index 8179670a1..bf0c5faae 100644
--- a/IGListKit.xcodeproj/project.pbxproj
+++ b/IGListKit.xcodeproj/project.pbxproj
@@ -235,6 +235,8 @@
298DDA3B1E3B16F800F76F50 /* IGLayoutTestDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 298DDA271E3B166100F76F50 /* IGLayoutTestDataSource.m */; };
298DDA3C1E3B170300F76F50 /* IGLayoutTestSection.m in Sources */ = {isa = PBXBuildFile; fileRef = 298DDA2B1E3B166100F76F50 /* IGLayoutTestSection.m */; };
298DDA3D1E3B170400F76F50 /* IGLayoutTestSection.m in Sources */ = {isa = PBXBuildFile; fileRef = 298DDA2B1E3B166100F76F50 /* IGLayoutTestSection.m */; };
+ 2995409E1F588C9400F647CF /* IGTestBindingWithoutDeselectionDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2995409B1F588C8D00F647CF /* IGTestBindingWithoutDeselectionDelegate.m */; };
+ 2995409F1F588C9500F647CF /* IGTestBindingWithoutDeselectionDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2995409B1F588C8D00F647CF /* IGTestBindingWithoutDeselectionDelegate.m */; };
2997D4971DF5FC0B005A5DD2 /* IGReloadDataUpdaterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 2997D4961DF5FC0B005A5DD2 /* IGReloadDataUpdaterTests.m */; };
29C4748C1DDF45F400AE68CE /* IGListAdapterProxyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29C4748A1DDF45E700AE68CE /* IGListAdapterProxyTests.m */; };
29C4748D1DDF45F900AE68CE /* IGListAdapterProxyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29C4748A1DDF45E700AE68CE /* IGListAdapterProxyTests.m */; };
@@ -483,6 +485,8 @@
298DDA291E3B166100F76F50 /* IGLayoutTestItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGLayoutTestItem.m; sourceTree = ""; };
298DDA2A1E3B166100F76F50 /* IGLayoutTestSection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGLayoutTestSection.h; sourceTree = ""; };
298DDA2B1E3B166100F76F50 /* IGLayoutTestSection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGLayoutTestSection.m; sourceTree = ""; };
+ 2995409A1F588C8D00F647CF /* IGTestBindingWithoutDeselectionDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGTestBindingWithoutDeselectionDelegate.h; sourceTree = ""; };
+ 2995409B1F588C8D00F647CF /* IGTestBindingWithoutDeselectionDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGTestBindingWithoutDeselectionDelegate.m; sourceTree = ""; };
2997D4961DF5FC0B005A5DD2 /* IGReloadDataUpdaterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGReloadDataUpdaterTests.m; sourceTree = ""; };
29C4748A1DDF45E700AE68CE /* IGListAdapterProxyTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListAdapterProxyTests.m; sourceTree = ""; };
29DA5C9E1EA7C70400113926 /* IGListGenericSectionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGListGenericSectionController.h; sourceTree = ""; };
@@ -840,6 +844,8 @@
298DD9D91E3ADE3300F76F50 /* IGTestStringBindableCell.m */,
88144F051D870EDC007C7F66 /* IGTestSupplementarySource.h */,
88144F061D870EDC007C7F66 /* IGTestSupplementarySource.m */,
+ 2995409A1F588C8D00F647CF /* IGTestBindingWithoutDeselectionDelegate.h */,
+ 2995409B1F588C8D00F647CF /* IGTestBindingWithoutDeselectionDelegate.m */,
);
path = Objects;
sourceTree = "";
@@ -1447,6 +1453,7 @@
885FE23C1DC51B86009CE2B4 /* IGTestCell.m in Sources */,
298DDA001E3AE28000F76F50 /* IGTestDiffingObject.m in Sources */,
29C579331DE0DA8A003A149B /* IGTestStoryboardSupplementaryView.m in Sources */,
+ 2995409F1F588C9500F647CF /* IGTestBindingWithoutDeselectionDelegate.m in Sources */,
885FE2401DC51B86009CE2B4 /* IGTestSingleItemDataSource.m in Sources */,
885FE2451DC51B86009CE2B4 /* IGTestStoryboardCell.m in Sources */,
298DD9CF1E3ADD1400F76F50 /* IGListBindingSectionControllerTests.m in Sources */,
@@ -1555,6 +1562,7 @@
88144F0C1D870EDC007C7F66 /* IGListDiffTests.m in Sources */,
8285404C1DE40C6E00118B94 /* IGListTestHorizontalSection.m in Sources */,
298DDA081E3AE2B100F76F50 /* IGTestNumberBindableCell.m in Sources */,
+ 2995409E1F588C9400F647CF /* IGTestBindingWithoutDeselectionDelegate.m in Sources */,
88144F0A1D870EDC007C7F66 /* IGListBatchUpdateDataTests.m in Sources */,
26271C8C1DAE96740073E116 /* IGListSingleNibItemControllerTests.m in Sources */,
29DA5CA31EA7C72400113926 /* IGListGenericSectionControllerTests.m in Sources */,
diff --git a/Source/IGListBindingSectionController.m b/Source/IGListBindingSectionController.m
index 7fb06d05f..549cf486d 100644
--- a/Source/IGListBindingSectionController.m
+++ b/Source/IGListBindingSectionController.m
@@ -124,7 +124,10 @@ - (void)didSelectItemAtIndex:(NSInteger)index {
}
- (void)didDeselectItemAtIndex:(NSInteger)index {
- [self.selectionDelegate sectionController:self didDeselectItemAtIndex:index viewModel:self.viewModels[index]];
+ id selectionDelegate = self.selectionDelegate;
+ if ([selectionDelegate respondsToSelector:@selector(sectionController:didDeselectItemAtIndex:viewModel:)]) {
+ [selectionDelegate sectionController:self didDeselectItemAtIndex:index viewModel:self.viewModels[index]];
+ }
}
@end
diff --git a/Source/Info.plist b/Source/Info.plist
index 4c70e9039..ce892bfee 100644
--- a/Source/Info.plist
+++ b/Source/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
FMWK
CFBundleShortVersionString
- 3.1.0
+ 3.1.1
CFBundleVersion
$(CURRENT_PROJECT_VERSION)
NSPrincipalClass
diff --git a/Tests/IGListBindingSectionControllerTests.m b/Tests/IGListBindingSectionControllerTests.m
index 5e9fb3f66..ecf3eed62 100644
--- a/Tests/IGListBindingSectionControllerTests.m
+++ b/Tests/IGListBindingSectionControllerTests.m
@@ -9,6 +9,7 @@
#import
+#import
#import
#import "IGTestDiffingDataSource.h"
@@ -20,6 +21,7 @@
#import "IGTestObject.h"
#import "IGTestCell.h"
#import "IGListTestCase.h"
+#import "IGTestBindingWithoutDeselectionDelegate.h"
@interface IGListBindingSectionControllerTests : IGListTestCase
@@ -121,6 +123,22 @@ - (void)test_whenDeselectingCell_thatCorrectViewModelSelected {
XCTAssertEqualObjects(section.deselectedViewModel, @"seven");
}
+- (void)test_whenDeselectingCell_withoutImplementation_thatNoOps {
+ [self setupWithObjects:@[
+ [[IGTestDiffingObject alloc] initWithKey:@1 objects:@[@7, @"seven"]],
+ ]];
+
+ IGTestBindingWithoutDeselectionDelegate *delegate = [IGTestBindingWithoutDeselectionDelegate new];
+ IGTestDiffingSectionController *section = [self.adapter sectionControllerForObject:self.dataSource.objects.firstObject];
+ section.selectionDelegate = delegate;
+
+ [self.adapter collectionView:self.collectionView didDeselectItemAtIndexPath:[NSIndexPath indexPathForItem:1 inSection:0]];
+ XCTAssertFalse(delegate.selected);
+
+ [self.adapter collectionView:self.collectionView didSelectItemAtIndexPath:[NSIndexPath indexPathForItem:1 inSection:0]];
+ XCTAssertTrue(delegate.selected);
+}
+
- (void)test_whenAdapterReloadsObjects_thatSectionUpdated {
[self setupWithObjects:@[
[[IGTestDiffingObject alloc] initWithKey:@1 objects:@[@7, @"seven"]],
diff --git a/Tests/Objects/IGTestBindingWithoutDeselectionDelegate.h b/Tests/Objects/IGTestBindingWithoutDeselectionDelegate.h
new file mode 100644
index 000000000..09c16c9a1
--- /dev/null
+++ b/Tests/Objects/IGTestBindingWithoutDeselectionDelegate.h
@@ -0,0 +1,18 @@
+/**
+ * Copyright (c) 2016-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+#import
+
+#import
+
+@interface IGTestBindingWithoutDeselectionDelegate : NSObject
+
+@property (nonatomic, assign) BOOL selected;
+
+@end
diff --git a/Tests/Objects/IGTestBindingWithoutDeselectionDelegate.m b/Tests/Objects/IGTestBindingWithoutDeselectionDelegate.m
new file mode 100644
index 000000000..a33bd4be0
--- /dev/null
+++ b/Tests/Objects/IGTestBindingWithoutDeselectionDelegate.m
@@ -0,0 +1,18 @@
+/**
+ * Copyright (c) 2016-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+#import "IGTestBindingWithoutDeselectionDelegate.h"
+
+@implementation IGTestBindingWithoutDeselectionDelegate
+
+- (void)sectionController:(IGListBindingSectionController *)sectionController didSelectItemAtIndex:(NSInteger)index viewModel:(id)viewModel {
+ self.selected = YES;
+}
+
+@end
diff --git a/docs/Classes.html b/docs/Classes.html
index 923f42248..2ecb9d343 100644
--- a/docs/Classes.html
+++ b/docs/Classes.html
@@ -867,7 +867,7 @@ Declaration
diff --git a/docs/Classes/IGListAdapter.html b/docs/Classes/IGListAdapter.html
index 9562fd30d..84035e3cd 100644
--- a/docs/Classes/IGListAdapter.html
+++ b/docs/Classes/IGListAdapter.html
@@ -1566,7 +1566,7 @@ Return Value
diff --git a/docs/Classes/IGListAdapterUpdater.html b/docs/Classes/IGListAdapterUpdater.html
index e3d354371..39d51e21c 100644
--- a/docs/Classes/IGListAdapterUpdater.html
+++ b/docs/Classes/IGListAdapterUpdater.html
@@ -398,7 +398,7 @@ Declaration
diff --git a/docs/Classes/IGListBatchUpdateData.html b/docs/Classes/IGListBatchUpdateData.html
index 13a796332..ac0c4c042 100644
--- a/docs/Classes/IGListBatchUpdateData.html
+++ b/docs/Classes/IGListBatchUpdateData.html
@@ -568,7 +568,7 @@ Return Value
diff --git a/docs/Classes/IGListBindingSectionController.html b/docs/Classes/IGListBindingSectionController.html
index 3754af5d9..68338ea7b 100644
--- a/docs/Classes/IGListBindingSectionController.html
+++ b/docs/Classes/IGListBindingSectionController.html
@@ -444,7 +444,7 @@ Parameters
diff --git a/docs/Classes/IGListCollectionViewLayout.html b/docs/Classes/IGListCollectionViewLayout.html
index a9b0f0683..557066edf 100644
--- a/docs/Classes/IGListCollectionViewLayout.html
+++ b/docs/Classes/IGListCollectionViewLayout.html
@@ -548,7 +548,7 @@ Return Value
diff --git a/docs/Classes/IGListGenericSectionController.html b/docs/Classes/IGListGenericSectionController.html
index e508c29e4..159764603 100644
--- a/docs/Classes/IGListGenericSectionController.html
+++ b/docs/Classes/IGListGenericSectionController.html
@@ -346,7 +346,7 @@ Parameters
diff --git a/docs/Classes/IGListIndexPathResult.html b/docs/Classes/IGListIndexPathResult.html
index da807d227..f68bd0c73 100644
--- a/docs/Classes/IGListIndexPathResult.html
+++ b/docs/Classes/IGListIndexPathResult.html
@@ -565,7 +565,7 @@ Declaration
diff --git a/docs/Classes/IGListIndexSetResult.html b/docs/Classes/IGListIndexSetResult.html
index 537bde6de..a2209a3f8 100644
--- a/docs/Classes/IGListIndexSetResult.html
+++ b/docs/Classes/IGListIndexSetResult.html
@@ -562,7 +562,7 @@ Declaration
diff --git a/docs/Classes/IGListMoveIndex.html b/docs/Classes/IGListMoveIndex.html
index 0ffdf92dd..224fb4117 100644
--- a/docs/Classes/IGListMoveIndex.html
+++ b/docs/Classes/IGListMoveIndex.html
@@ -313,7 +313,7 @@ Declaration
diff --git a/docs/Classes/IGListMoveIndexPath.html b/docs/Classes/IGListMoveIndexPath.html
index 5eb1183e1..9569a2717 100644
--- a/docs/Classes/IGListMoveIndexPath.html
+++ b/docs/Classes/IGListMoveIndexPath.html
@@ -313,7 +313,7 @@ Declaration
diff --git a/docs/Classes/IGListSectionController.html b/docs/Classes/IGListSectionController.html
index c802a5b1f..2535037c8 100644
--- a/docs/Classes/IGListSectionController.html
+++ b/docs/Classes/IGListSectionController.html
@@ -1046,7 +1046,7 @@ Return Value
diff --git a/docs/Classes/IGListSingleSectionController.html b/docs/Classes/IGListSingleSectionController.html
index d31792d05..1b6b4aa53 100644
--- a/docs/Classes/IGListSingleSectionController.html
+++ b/docs/Classes/IGListSingleSectionController.html
@@ -564,7 +564,7 @@ Declaration
diff --git a/docs/Classes/IGListStackedSectionController.html b/docs/Classes/IGListStackedSectionController.html
index e4b864bb5..d70b13133 100644
--- a/docs/Classes/IGListStackedSectionController.html
+++ b/docs/Classes/IGListStackedSectionController.html
@@ -318,7 +318,7 @@ Parameters
diff --git a/docs/Constants.html b/docs/Constants.html
index bd276d779..e8047ed45 100644
--- a/docs/Constants.html
+++ b/docs/Constants.html
@@ -300,7 +300,7 @@ Declaration
diff --git a/docs/Enums.html b/docs/Enums.html
index 578f24ffa..7828050c8 100644
--- a/docs/Enums.html
+++ b/docs/Enums.html
@@ -311,7 +311,7 @@ Declaration
diff --git a/docs/Enums/IGListDiffOption.html b/docs/Enums/IGListDiffOption.html
index 0c9a73e50..ed0493b99 100644
--- a/docs/Enums/IGListDiffOption.html
+++ b/docs/Enums/IGListDiffOption.html
@@ -312,7 +312,7 @@ Declaration
diff --git a/docs/Enums/IGListExperiment.html b/docs/Enums/IGListExperiment.html
index ce8f3fcb6..2230d8149 100644
--- a/docs/Enums/IGListExperiment.html
+++ b/docs/Enums/IGListExperiment.html
@@ -344,7 +344,7 @@ Declaration
diff --git a/docs/Functions.html b/docs/Functions.html
index 52bfca8c5..938b28414 100644
--- a/docs/Functions.html
+++ b/docs/Functions.html
@@ -723,7 +723,7 @@ Return Value
diff --git a/docs/Guides.html b/docs/Guides.html
index 2cc34698e..a850ee83f 100644
--- a/docs/Guides.html
+++ b/docs/Guides.html
@@ -237,7 +237,7 @@ Guides
diff --git a/docs/Protocols.html b/docs/Protocols.html
index 31ba26980..b61b15f49 100644
--- a/docs/Protocols.html
+++ b/docs/Protocols.html
@@ -800,7 +800,7 @@ Declaration
diff --git a/docs/Protocols/IGListAdapterDataSource.html b/docs/Protocols/IGListAdapterDataSource.html
index 0ab02f7f2..6fd87ccfa 100644
--- a/docs/Protocols/IGListAdapterDataSource.html
+++ b/docs/Protocols/IGListAdapterDataSource.html
@@ -446,7 +446,7 @@ Return Value
diff --git a/docs/Protocols/IGListAdapterDelegate.html b/docs/Protocols/IGListAdapterDelegate.html
index 987a0e4c8..6a6d0e33b 100644
--- a/docs/Protocols/IGListAdapterDelegate.html
+++ b/docs/Protocols/IGListAdapterDelegate.html
@@ -402,7 +402,7 @@ Parameters
diff --git a/docs/Protocols/IGListAdapterUpdaterDelegate.html b/docs/Protocols/IGListAdapterUpdaterDelegate.html
index 31c22ce4a..bbd38183a 100644
--- a/docs/Protocols/IGListAdapterUpdaterDelegate.html
+++ b/docs/Protocols/IGListAdapterUpdaterDelegate.html
@@ -1049,7 +1049,7 @@ Parameters
diff --git a/docs/Protocols/IGListBatchContext.html b/docs/Protocols/IGListBatchContext.html
index ed1aba5ff..d59d8145d 100644
--- a/docs/Protocols/IGListBatchContext.html
+++ b/docs/Protocols/IGListBatchContext.html
@@ -574,7 +574,7 @@ Parameters
diff --git a/docs/Protocols/IGListBindable.html b/docs/Protocols/IGListBindable.html
index c89af01ae..5e4e61cb7 100644
--- a/docs/Protocols/IGListBindable.html
+++ b/docs/Protocols/IGListBindable.html
@@ -305,7 +305,7 @@ Parameters
diff --git a/docs/Protocols/IGListBindingSectionControllerDataSource.html b/docs/Protocols/IGListBindingSectionControllerDataSource.html
index 3ef38d675..4b7840973 100644
--- a/docs/Protocols/IGListBindingSectionControllerDataSource.html
+++ b/docs/Protocols/IGListBindingSectionControllerDataSource.html
@@ -482,7 +482,7 @@ Return Value
diff --git a/docs/Protocols/IGListBindingSectionControllerSelectionDelegate.html b/docs/Protocols/IGListBindingSectionControllerSelectionDelegate.html
index 4fdd7476c..55034616f 100644
--- a/docs/Protocols/IGListBindingSectionControllerSelectionDelegate.html
+++ b/docs/Protocols/IGListBindingSectionControllerSelectionDelegate.html
@@ -353,7 +353,7 @@ Declaration
diff --git a/docs/Protocols/IGListCollectionContext.html b/docs/Protocols/IGListCollectionContext.html
index 44cfa7e88..91d98fe38 100644
--- a/docs/Protocols/IGListCollectionContext.html
+++ b/docs/Protocols/IGListCollectionContext.html
@@ -1677,7 +1677,7 @@ Parameters
diff --git a/docs/Protocols/IGListDiffable.html b/docs/Protocols/IGListDiffable.html
index 7eddebf34..633333e19 100644
--- a/docs/Protocols/IGListDiffable.html
+++ b/docs/Protocols/IGListDiffable.html
@@ -351,7 +351,7 @@ Return Value
diff --git a/docs/Protocols/IGListDisplayDelegate.html b/docs/Protocols/IGListDisplayDelegate.html
index e262682e8..61bd55307 100644
--- a/docs/Protocols/IGListDisplayDelegate.html
+++ b/docs/Protocols/IGListDisplayDelegate.html
@@ -560,7 +560,7 @@ Parameters
diff --git a/docs/Protocols/IGListScrollDelegate.html b/docs/Protocols/IGListScrollDelegate.html
index 8bea2732c..174bd1375 100644
--- a/docs/Protocols/IGListScrollDelegate.html
+++ b/docs/Protocols/IGListScrollDelegate.html
@@ -471,7 +471,7 @@ Declaration
diff --git a/docs/Protocols/IGListSingleSectionControllerDelegate.html b/docs/Protocols/IGListSingleSectionControllerDelegate.html
index f6d7248e4..925b7c008 100644
--- a/docs/Protocols/IGListSingleSectionControllerDelegate.html
+++ b/docs/Protocols/IGListSingleSectionControllerDelegate.html
@@ -313,7 +313,7 @@ Parameters
diff --git a/docs/Protocols/IGListSupplementaryViewSource.html b/docs/Protocols/IGListSupplementaryViewSource.html
index 90f8ad0d0..bb24a2a00 100644
--- a/docs/Protocols/IGListSupplementaryViewSource.html
+++ b/docs/Protocols/IGListSupplementaryViewSource.html
@@ -429,7 +429,7 @@ Return Value
diff --git a/docs/Protocols/IGListUpdatingDelegate.html b/docs/Protocols/IGListUpdatingDelegate.html
index 5af858c75..d9265d50d 100644
--- a/docs/Protocols/IGListUpdatingDelegate.html
+++ b/docs/Protocols/IGListUpdatingDelegate.html
@@ -944,7 +944,7 @@ Parameters
diff --git a/docs/Protocols/IGListWorkingRangeDelegate.html b/docs/Protocols/IGListWorkingRangeDelegate.html
index 538be5fb7..f110d338a 100644
--- a/docs/Protocols/IGListWorkingRangeDelegate.html
+++ b/docs/Protocols/IGListWorkingRangeDelegate.html
@@ -381,7 +381,7 @@ Parameters
diff --git a/docs/Type Definitions.html b/docs/Type Definitions.html
index 977ca877b..69ce6896a 100644
--- a/docs/Type Definitions.html
+++ b/docs/Type Definitions.html
@@ -598,7 +598,7 @@ Declaration
diff --git a/docs/best-practices-and-faq.html b/docs/best-practices-and-faq.html
index e343d582e..c859492f7 100644
--- a/docs/best-practices-and-faq.html
+++ b/docs/best-practices-and-faq.html
@@ -365,7 +365,7 @@ Custom Updaters
diff --git a/docs/iglistdiffable-and-equality.html b/docs/iglistdiffable-and-equality.html
index 61a235daa..8185aa874 100644
--- a/docs/iglistdiffable-and-equality.html
+++ b/docs/iglistdiffable-and-equality.html
@@ -323,7 +323,7 @@ License
diff --git a/docs/installation.html b/docs/installation.html
index aab054e9e..c65de4b77 100644
--- a/docs/installation.html
+++ b/docs/installation.html
@@ -269,7 +269,7 @@ Carthage
diff --git a/docs/migration.html b/docs/migration.html
index 90df10f89..514c85783 100644
--- a/docs/migration.html
+++ b/docs/migration.html
@@ -350,7 +350,7 @@