nil out displayContext when we get a new one

Summary: Don't set the new one in the subnodes yet as this will cause ASEnvironmentTraitCollectionIsEqualToASEnvironmentTraitCollection to return NO if only the displayContext changed.

Reviewers: garrett, levi, rmalik

Reviewed By: garrett, levi, rmalik

Subscribers: rmalik

Differential Revision: https://phabricator.pinadmin.com/D94320
This commit is contained in:
ricky
2016-06-02 10:32:56 -07:00
parent b66b519bd6
commit 501fed16aa
2 changed files with 9 additions and 8 deletions

View File

@@ -56,7 +56,7 @@
- (void)dealloc
{
if (_traitColectionContext != nil) {
if (_traitCollectionContext != nil) {
// The setter will iterate through the VC's subnodes and replace the traitCollectionContext in their ASEnvironmentTraitCollection with nil.
// Since the VC holds the only strong reference to this context and we are in the process of destroying
// the VC, all the references in the subnodes will be unsafe unless we nil them out. More than likely all the subnodes will be dealloc'ed
@@ -195,13 +195,14 @@ ASVisibilityDepthImplementation;
#pragma mark - ASEnvironmentTraitCollection
- (void)setTraitColectionContext:(id)traitColectionContext
- (void)setTraitColectionContext:(id)traitCollectionContext
{
if (_traitColectionContext != traitColectionContext) {
// propagate first so that nodes aren't hanging around with a dealloc'ed pointer
ASEnvironmentTraitCollectionUpdateDisplayContext(self.node, traitColectionContext);
if (_traitCollectionContext != traitCollectionContext) {
// nil out the displayContext in the subnodes so they aren't hanging around with a dealloc'ed pointer don't set
// the new context yet as this will cause ASEnvironmentTraitCollectionIsEqualToASEnvironmentTraitCollection to fail
ASEnvironmentTraitCollectionUpdateDisplayContext(self.node, nil);
_traitColectionContext = traitColectionContext;
_traitCollectionContext = traitCollectionContext;
}
}
@@ -214,7 +215,7 @@ ASVisibilityDepthImplementation;
}
ASEnvironmentTraitCollection asyncTraitCollection = ASEnvironmentTraitCollectionFromUITraitCollection(traitCollection);
asyncTraitCollection.displayContext = self.traitColectionContext;
asyncTraitCollection.displayContext = self.traitCollectionContext;
return asyncTraitCollection;
}