mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-12 09:19:52 +00:00
[Sample] Resolve mutation during enumeration issue
- Mutating a dictionary using -enumerateKeysAndObjectsUsingBlock: can have unintended consequences. - Using a copy of the keys to iterate over the values inside the dictionary instead.
This commit is contained in:
parent
8e38e225c8
commit
41a53887d7
@ -89,7 +89,9 @@
|
|||||||
|
|
||||||
- (void)willInsertSections:(NSIndexSet *)sections
|
- (void)willInsertSections:(NSIndexSet *)sections
|
||||||
{
|
{
|
||||||
[_pendingContexts enumerateKeysAndObjectsUsingBlock:^(NSString *kind, NSMutableArray<ASIndexedNodeContext *> *contexts, BOOL *stop) {
|
NSArray *keys = _pendingContexts.allKeys;
|
||||||
|
for (NSString *kind in keys) {
|
||||||
|
NSMutableArray<ASIndexedNodeContext *> *contexts = _pendingContexts[kind];
|
||||||
NSMutableArray *sectionArray = [NSMutableArray arrayWithCapacity:sections.count];
|
NSMutableArray *sectionArray = [NSMutableArray arrayWithCapacity:sections.count];
|
||||||
for (NSUInteger i = 0; i < sections.count; i++) {
|
for (NSUInteger i = 0; i < sections.count; i++) {
|
||||||
[sectionArray addObject:[NSMutableArray array]];
|
[sectionArray addObject:[NSMutableArray array]];
|
||||||
@ -100,7 +102,7 @@
|
|||||||
[self insertNodes:nodes ofKind:kind atIndexPaths:indexPaths completion:nil];
|
[self insertNodes:nodes ofKind:kind atIndexPaths:indexPaths completion:nil];
|
||||||
}];
|
}];
|
||||||
[_pendingContexts removeObjectForKey:kind];
|
[_pendingContexts removeObjectForKey:kind];
|
||||||
}];
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)willDeleteSections:(NSIndexSet *)sections
|
- (void)willDeleteSections:(NSIndexSet *)sections
|
||||||
@ -124,7 +126,9 @@
|
|||||||
|
|
||||||
- (void)willReloadSections:(NSIndexSet *)sections
|
- (void)willReloadSections:(NSIndexSet *)sections
|
||||||
{
|
{
|
||||||
[_pendingContexts enumerateKeysAndObjectsUsingBlock:^(NSString *kind, NSMutableArray<ASIndexedNodeContext *> *contexts, BOOL *stop) {
|
NSArray *keys = _pendingContexts.allKeys;
|
||||||
|
for (NSString *kind in keys) {
|
||||||
|
NSMutableArray<ASIndexedNodeContext *> *contexts = _pendingContexts[kind];
|
||||||
NSArray *indexPaths = ASIndexPathsForMultidimensionalArrayAtIndexSet([self editingNodesOfKind:kind], sections);
|
NSArray *indexPaths = ASIndexPathsForMultidimensionalArrayAtIndexSet([self editingNodesOfKind:kind], sections);
|
||||||
[self deleteNodesOfKind:kind atIndexPaths:indexPaths completion:nil];
|
[self deleteNodesOfKind:kind atIndexPaths:indexPaths completion:nil];
|
||||||
// reinsert the elements
|
// reinsert the elements
|
||||||
@ -132,7 +136,7 @@
|
|||||||
[self insertNodes:nodes ofKind:kind atIndexPaths:indexPaths completion:nil];
|
[self insertNodes:nodes ofKind:kind atIndexPaths:indexPaths completion:nil];
|
||||||
}];
|
}];
|
||||||
[_pendingContexts removeObjectForKey:kind];
|
[_pendingContexts removeObjectForKey:kind];
|
||||||
}];
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)willMoveSection:(NSInteger)section toSection:(NSInteger)newSection
|
- (void)willMoveSection:(NSInteger)section toSection:(NSInteger)newSection
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user