A data-driven UICollectionView framework for building fast and flexible lists.
Find a file
Zhisheng Huang 6311bbcfb4 Fix the visibleObjects inconsistency assertion
Summary:
Another source-of-truth inconsistency issue.

I kept getting this assertion T65423827 task.
It turned out the the root cause is that we use the `_viewSectionControllerMap` to keep track of the mapping between view and section controller.

Which is dangerous.
Because the UICV's source of truth is the `sectionMap`, now we are adding another source of truth between view <-> sectionController to be `_viewSectionControllerMap`, this is just waiting for bugs to happen.

We should always refers to sectionMap as the source of truth for everything here: since we can get the section index, we can replace all the `-sectionControllerForView` to use `-sectionControllerForSection:` instead, which is safer.

Multiple source of truth is the bug for this unexpected assertion.

Once we can cleanup this, then we dont need to use that weird: `- (void)mapView:(UICollectionReusableView *)view toSectionController:(IGListSectionController *)sectionController` API which we might forget to map, that can cause bug.

Reviewed By: elfredpagan

Differential Revision: D24173911

fbshipit-source-id: 6138cafc0b382fc569d17b14b13a6b50d85d342d
2020-10-17 02:05:24 -07:00
.github Update issue template to ask for example project 2018-12-07 15:12:26 -08:00
docs Fix the build_doc.sh and regenerate all the docs! (#1393) 2019-11-20 16:23:15 -08:00
Examples Adapts to dark mode for iOS example project. (#1453) 2020-10-03 01:39:08 -07:00
Guides Update the version to be 4.0 2019-11-20 16:23:15 -08:00
IGListKit.xcodeproj udpate xcodeproj and example projects 2020-09-08 09:11:12 -07:00
IGListKit.xcworkspace Fix "new file header template" whitespace #trivial (#1324) 2019-05-20 16:39:14 -07:00
Pods Run ./script/setup.sh to generate project files (#1431) 2020-02-26 12:26:58 -08:00
remodel-plugin Update remodel iglistdiffable plugin to the latest 2019-08-14 12:23:59 -07:00
Resources Create binding and modeling guide/tutorial 2017-08-21 14:46:53 -07:00
scripts Run lint on IGListKit 2019-12-19 09:34:42 -08:00
Source Fix the visibleObjects inconsistency assertion 2020-10-17 02:05:24 -07:00
Tests fix invalidateLayout crash 2020-09-16 16:19:09 -07:00
.gitignore Nitpicky comment fixes 2017-03-31 13:01:40 -07:00
.slather.yml Ignore Xcode dir in coverage reports 2016-11-20 07:58:58 -08:00
.travis.yml Fix the podlint error (#1428) 2020-02-25 23:20:25 -08:00
CHANGELOG.md Expose ListGenericSectionController.object and ListSectionController.collectionContext as implicitly-unwrapped optionals 2020-09-10 12:30:10 -07:00
CODE_OF_CONDUCT.md Adopt Contributor Covenant 2019-08-29 23:20:54 -07:00
Dangerfile Update .travis.yml and lint.sh, try to fix #1060 and lint errors #trivial 2018-02-02 13:16:46 -08:00
Gemfile Update Cocoapods 2019-11-13 05:30:27 -08:00
Gemfile.lock Bump json from 2.2.0 to 2.3.1 (#1448) 2020-07-28 11:17:17 -07:00
IGListDiffKit.podspec Run lint on IGListKit 2019-12-19 09:34:42 -08:00
IGListKit.podspec Run lint on IGListKit 2019-12-19 09:34:42 -08:00
IGListSwiftKit.podspec Run lint on IGListKit 2019-12-19 09:34:42 -08:00
LICENSE.md Update MIT license language (#1272) 2018-11-01 10:58:46 -07:00
Package.swift Add support for Swift PM (#1323) 2019-05-21 14:50:56 -07:00
Podfile use cocoapods cdn (#1386) 2019-11-20 09:24:48 -08:00
Podfile.lock use cocoapods cdn (#1386) 2019-11-20 09:24:48 -08:00
README.md CCAutoTag : Chinese README translate (#1228) 2020-09-29 10:39:01 -07:00
README.zh.md CCAutoTag : Chinese README translate (#1228) 2020-09-29 10:39:01 -07:00

Build Status Coverage Status Pods Version Platforms Carthage Compatible


A data-driven UICollectionView framework for building fast and flexible lists.

Main Features
🙅 Never call performBatchUpdates(_:, completion:) or reloadData() again
🏠 Better architecture with reusable cells and components
🔠 Create collections with multiple data types
🔑 Decoupled diffing algorithm
Fully unit tested
🔍 Customize your diffing behavior for your models
📱 Simply UICollectionView at its core
🚀 Extendable API
🐦 Written in Objective-C with full Swift interop support

IGListKit is built and maintained with ❤️ by Instagram engineering. We use the open source version master branch in the Instagram app.

Multilingual translation

Chinese README

Requirements

  • Xcode 9.0+
  • iOS 9.0+
  • tvOS 9.0+
  • macOS 10.11+ (diffing algorithm components only)
  • Interoperability with Swift 3.0+

Installation

CocoaPods

The preferred installation method is with CocoaPods. Add the following to your Podfile:

pod 'IGListKit', '~> 4.0.0'

Carthage

For Carthage, add the following to your Cartfile:

github "Instagram/IGListKit" ~> 4.0.0

For advanced usage, see our Installation Guide.

Getting Started

$ git clone https://github.com/Instagram/IGListKit.git
$ cd IGListKit/
$ ./scripts/setup.sh

Documentation

You can find the docs here. Documentation is generated with jazzy and hosted on GitHub-Pages.

To regenerate docs, run ./scripts/build_docs.sh from the root directory in the repo.

Vision

For the long-term goals and "vision" of IGListKit, please read our Vision doc.

Contributing

Please see the CONTRIBUTING file for how to help. At Instagram, we sync the open source version of IGListKit daily, so we're always testing the latest changes. But that requires all changes be thoroughly tested and follow our style guide.

We have a set of starter tasks that are great for beginners to jump in on and start contributing.

License

IGListKit is MIT-licensed.

The files in the /Examples/ directory are licensed under a separate license as specified in each file. Documentation is licensed CC-BY-4.0.