Это так.
A представляет B. Здесь, A является родителем B (Здесь A.modalViewController будет B, а B.parentViewController будет A)
И B представляет C. Здесь B является родителем C (Здесь B.modalViewController будет C, а C.parentViewController будет B)
В соответствии с руководящими принципами Apple, родительский контроллер обязан уволить дочерний контроллер.
Поэтому, если вы хотите закрыть контроллер C, вы вызываете dismissModalViewController в C.parentViewController. Так как родитель C является B, таким образом B отклоняет свой модальный (дочерний) контроллер, который он представил.
Но вы даже хотите уволить B. Ответственность родителей B за увольнение B. Так что вам нужно сказать [B.parentViewController dismissModalViewControllerAnimated: YES];
Таким образом, вам нужно получить B из C как C.parentViewController (не забудьте здесь выполнить приведение). Затем вы говорите, что [B.parentViewController dismissModalViewControllerAnimated: YES];