Наконец-то я смог решить проблему. Кажется, по какой-то пока неизвестной причине viewDidLoad и viewWillAppear моего viewController оба назывались до того, как приложение делало FinishLaunch . Поэтому каждый раз, когда я добавляю подпредставление, оно добавляется в UIWindow, который еще не существует. Я переместил свой код в viewDidAppear , и исправил его .
Если у вас есть похожая проблема , проверьте область памяти UIWindow и убедитесь, что это то же самое UIWindow, к которому вы добавляли подпредставление.