diff --git a/AsyncDisplayKit/ASDisplayNode.h b/AsyncDisplayKit/ASDisplayNode.h index c977223128..2fed3d8fb8 100644 --- a/AsyncDisplayKit/ASDisplayNode.h +++ b/AsyncDisplayKit/ASDisplayNode.h @@ -331,10 +331,19 @@ typedef CALayer *(^ASDisplayNodeLayerBlock)(); * This method is used to notify the node that it should purge any content that is both expensive to fetch and to * retain in memory. * - * @see fetchRemoteData + * @see clearRemoteData and fetchRemoteData */ - (void)recursivelyClearRemoteData; +/** + * @abstract Calls -fetchRemoteData on the receiver and its subnode hierarchy. + * + * @discussion Fetches content from remote sources for the current node and all subnodes. + * + * @see fetchRemoteData and clearRemoteData + */ +- (void)recursivelyFetchRemoteData; + /** * @abstract Toggle displaying a placeholder over the node that covers content until the node and all subnodes are * displayed. diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index c95f9128cd..0fba57ae99 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -1348,6 +1348,14 @@ static NSInteger incrementIfFound(NSInteger i) { // subclass override } +- (void)recursivelyFetchRemoteData +{ + for (ASDisplayNode *subnode in self.subnodes) { + [subnode recursivelyFetchRemoteData]; + } + [self fetchRemoteData]; +} + - (void)clearRemoteData { // subclass override diff --git a/AsyncDisplayKit/Details/ASRangeHandlerPreload.mm b/AsyncDisplayKit/Details/ASRangeHandlerPreload.mm index 21f1bf16dc..d18fef070c 100644 --- a/AsyncDisplayKit/Details/ASRangeHandlerPreload.mm +++ b/AsyncDisplayKit/Details/ASRangeHandlerPreload.mm @@ -16,13 +16,13 @@ - (void)node:(ASDisplayNode *)node enteredRangeOfType:(ASLayoutRangeType)rangeType { ASDisplayNodeAssert(rangeType == ASLayoutRangeTypePreload, @"Preload delegate should not handle other ranges"); - [node fetchRemoteData]; + [node recursivelyFetchRemoteData]; } - (void)node:(ASDisplayNode *)node exitedRangeOfType:(ASLayoutRangeType)rangeType { ASDisplayNodeAssert(rangeType == ASLayoutRangeTypePreload, @"Preload delegate should not handle other ranges"); - [node clearRemoteData]; + [node recursivelyClearRemoteData]; } @end