From 6f41d28dd0c8daf86462f7807b0dd73409ef3485 Mon Sep 17 00:00:00 2001 From: Levi McCallum Date: Fri, 8 Apr 2016 15:49:28 -0700 Subject: [PATCH] Fix issue where zero was returned on idential object array lookup Reviewers: scottg, schneider, garrett Reviewed By: garrett Subscribers: jenkins Differential Revision: https://phabricator.pinadmin.com/D84131 --- AsyncDisplayKit/Private/ASDisplayNodeLayoutContext.mm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/AsyncDisplayKit/Private/ASDisplayNodeLayoutContext.mm b/AsyncDisplayKit/Private/ASDisplayNodeLayoutContext.mm index 128b0177c6..797657ac09 100644 --- a/AsyncDisplayKit/Private/ASDisplayNodeLayoutContext.mm +++ b/AsyncDisplayKit/Private/ASDisplayNodeLayoutContext.mm @@ -166,9 +166,13 @@ static inline void findNodesInLayoutAtIndexesWithFilteredNodes(ASLayout *layout, while (idx != NSNotFound) { ASDisplayNode *node = (ASDisplayNode *)layout.immediateSublayouts[idx].layoutableObject; ASDisplayNodeCAssert(node, @"A flattened layout must consist exclusively of node sublayouts"); - if (node != nil && [filteredNodes indexOfObjectIdenticalTo:node] != NSNotFound) { - [nodes addObject:node]; - positions.push_back(idx); + // Ignore the odd case in which a non-node sublayout is accessed and the type cast fails + if (node != nil) { + BOOL notFiltered = (filteredNodes == nil || [filteredNodes indexOfObjectIdenticalTo:node] == NSNotFound); + if (notFiltered) { + [nodes addObject:node]; + positions.push_back(idx); + } } idx = [indexes indexGreaterThanIndex:idx]; }