10
votes

SupprimerFROMPARENTViewController - Avez-vous besoin de nul puis-vous-être?

Un contrôleur de vue enfant peut-il "se retirer"? " .....

Vous avez un contrôleur d'affichage "redmessage". Vous avez une propriété forte ordinaire pour elle ... p>

@property (fort) redmessage * rouge; p>

vous l'ajoutez ("modallalement") sur votre VC actuel .. . P>

-(void)dismissMyselfCompletely
    {
    [self willMoveToParentViewController:nil];
    [self.view removeFromSuperview];
    [self removeFromParentViewController];
    }


2 commentaires

Bounty pour référence faisant autorité.


Désolé de fournir sa propre réponse, mais nous l'avons examiné de manière approfondie et avons trouvé le résultat donné dans la réponse ... J'espère que cela aide quelqu'un !!


3 Réponses :


3
votes

C'est plus question de gestion de la mémoire que d'afficher le confinement du contrôleur. Non, vous n'avez pas besoin de mettre nul là-bas, mais ...

Vous supposez que vous en avez une référence. La question est la suivante: est-ce une référence forte? Si oui, que vous devez la nier, car ce contrôleur d'affichage ne sera pas dellocate. Le moyen le plus simple de tester est d'ajouter -Dealoc méthode à RM avec le message de journal.


1 commentaires

En effet - c'est une question de mémoire, alors profitez de la prime! :)



13
votes

Après des tests considérables, nous avons constaté qu'il semblait être le cas que:

Vous pouvez en fait permettre à un VC de "se retirer". h1>

Il s'en va et n'est pas retenu. P>

Nous ajoutons la VC sur le dessus comme ceci (juste de la manière habituelle, vous ajoutez un "modal" VC sur le dessus ...) P>

self.red = (Red *)[self.storyboard
 instantiateViewControllerWithIdentifier:@"RedID"];


2 commentaires

Merci d'avoir partagé vos recherches ici! J'ai eu un bogue nagging (rare à frapper) dans mon contrôleur de vue de conteneur personnalisé pendant un moment, ce qui pourrait bien m'aider à le trouver.


Oui, il y a beaucoup de confusion à ce sujet. J'espère que ça aide!



2
votes

Il semble y avoir une différence dans votre question et votre réponse. Dans votre méthode de superposition (en réponse), vous n'avez pas affecté la vue ViewController à une propriété forte et en question que vous avez une propriété forte. Je n'ai pas testé le code mais je pense que vous devriez mettre à jour votre test pour avoir une propriété forte.

Je pense idéalement que nous devrions "nil" la propriété. Sinon, à partir de la pile Oui, le contrôleur de vue sera supprimé.


3 commentaires

Salut anuj - correct: dans la "cette méthode fonctionne" exemple dans la réponse que j'ai placée, comme il est indiqué ... "Notez qu'il n'y a pas de propriété tenant RR - il est juste créé et ajouté à la volée dans cette catégorie. "


Salut Joe - Désolé, j'ai raté ça.Did Vous vérifiez également avec une propriété forte?


Hey anuj - exactement correct. Comme vous l'attendez, si vous utilisez une propriété, dans le parent vc ... Cela ne disparaîtra pas! (FTR Notez que je viens d'utiliser une catégorie pour faire le travail. Depuis le VC, cela appelle simplement [Self Showoverlay];, il ne mentionne même pas la classe "rouge".)