https://github.com/badoo/ios-collection-batch-updates
Safely perform batch updates in UITableView and UICollectionView
https://github.com/badoo/ios-collection-batch-updates
Last synced: about 1 year ago
JSON representation
Safely perform batch updates in UITableView and UICollectionView
- Host: GitHub
- URL: https://github.com/badoo/ios-collection-batch-updates
- Owner: badoo
- License: mit
- Created: 2015-09-22T11:44:56.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2018-04-30T14:49:15.000Z (about 8 years ago)
- Last Synced: 2025-04-16T15:35:35.535Z (about 1 year ago)
- Language: Objective-C
- Homepage:
- Size: 2.19 MB
- Stars: 122
- Watchers: 38
- Forks: 21
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# BMACollectionBatchUpdates [](https://travis-ci.org/badoo/ios-collection-batch-updates) [](https://codecov.io/github/badoo/ios-collection-batch-updates?branch=master) [](https://img.shields.io/cocoapods/v/BMACollectionBatchUpdates.svg)
`BMACollectionBatchUpdates` is a set of classes to generate updates and extensions to `UICollectionView` and `UITableView` to perform them safely in a batch manner.
## How to use
In order to generate the mentioned updates it has to make collection item and section conform the `BMAUpdatableCollectionItem` and`BMAUpdatableCollectionItem` protocols respectively:
```objectivec
@interface BMAExampleItemsSection : NSObject
@end
@interface BMAExampleItem : NSObject
@end
```
Once both old and new data models are available, it has to calculate changes and apply them:
```objectivec
@implementation BMAExampleCollectionViewController
- (void)setSections:(NSArray *)sections {
[BMACollectionUpdate calculateUpdatesForOldModel:self.sections
newModel:sections
sectionsPriorityOrder:nil
eliminatesDuplicates:YES
completion:^(NSArray *sections, NSArray *updates) {
[self.collectionView bma_performBatchUpdates:updates applyChangesToModelBlock:^{
_sections = sections;
} reloadCellBlock:^(UICollectionViewCell *cell, NSIndexPath *indexPath) {
[self reloadCell:cell atIndexPath:indexPath];
} completionBlock:nil];
}];
}
@end
```
```objectivec
@implementation BMAExampleTableViewController
- (void)setSections:(NSArray *)sections {
[BMACollectionUpdate calculateUpdatesForOldModel:self.sections
newModel:sections
sectionsPriorityOrder:nil
eliminatesDuplicates:YES
completion:^(NSArray *sections, NSArray *updates) {
[self.collectionView bma_performBatchUpdates:updates applyChangesToModelBlock:^{
_sections = sections;
} reloadCellBlock:^(UITableViewCell *cell, NSIndexPath *indexPath) {
[self reloadCell:cell atIndexPath:indexPath];
} completionBlock:nil];
}];
}
@end
```
### Generating cell update for existing BMAUpdatableCollectionItem
`BMAUpdatableCollectionItem` conforms to `NSObject` protocol and by doing so it provides `isEqual` method for comparing items. In most cases comparing uids in `isEqual` will be enough, but sometimes your model may contain additional properties that can change and requie cell update.
Simple example: online status which can be either online or offline. When it changes we need to gerenrate cell update for this item. To detect this change `isEqual` can be implemented in following way:
```objectivec
- (BOOL)isEqual:(id)object {
if (self == object) {
return YES;
}
if (![object isKindOfClass:[self class]]) {
return NO;
}
BMAExampleItem *item = (BMAExampleItem *)object;
return [self.uid isEqual:item.uid] && self.isOnline == item.isOnline;
}
@end
```
## How to install
### Using CocoaPods
1. Include the following line in your `Podfile`:
```
pod 'BMACollectionBatchUpdates', '~> 1.1'
```
If you like to live on the bleeding edge, you can use the `master` branch with:
```
pod 'BMACollectionBatchUpdates', :git => 'https://github.com/badoo/ios-collection-batch-updates'
```
2. Run `pod install`
### Manually
1. Clone, add as a submodule or [download.](https://github.com/badoo/ios-collection-batch-updates/archive/master.zip)
2. Add all the files under `BMACollectionBatchUpdates` to your project.
3. Make sure your project is configured to use ARC.
## License
Source code is distributed under MIT license.
## Blog
Read more on our [tech blog](http://techblog.badoo.com/) or explore our other [open source projects](https://github.com/badoo)