2013-11-22 2 views
3

Я нахожусь в процессе создания достаточно сложного iPad-приложения, которое будет работать на iOS7 +. Приложение имеет экран входа в систему, к которому необходимо получить доступ после каждого сеанса пользователя, это начальный контроллер представления в моей раскадровке. Пользователь может выйти из любого другого экрана приложения (имеется около 60 других экранов), нажав кнопку, которая всегда доступна в любом другом ViewController. Когда пользователь выходит из системы, следует использовать настраиваемую анимацию перехода.Текущий контроллер просмотра без вызова presentViewController (или rejectViewController)

Кажется, я могу достичь этого одним из двух способов: либо с помощью экрана с каждого экрана в приложении на страницу входа в систему, что делает невозможным чтение раскадровки, либо presentViewController.

Я реализовал это с помощью presentViewController, просмотрев контроллер представления по id из раскадровки (который создает новый экземпляр, который является желаемым поведением), а затем представляет его из текущего контроллера представления.

Неудивительно, что это не отменяет исходный контроллер входа в систему и по существу создает стек контроллеров представления, в конце концов у меня заканчивается память, так как каждый раз, когда пользователь выходит из системы, создается и сохраняется новый контроллер входа в систему.

Есть ли способ очистить этот «стек» контроллеров вида?

Есть ли другой способ представить контроллер вида с анимацией, которая не включает в себя presentViewController или segues? Я рассмотрел сдерживание контроллера контроллера, но это не кажется правильным при использовании с раскадными версиями.

ответ

1

Рассматривали ли вы замену контроллера корневого представления? Если делегат приложения наблюдает уведомление о выходе и заменяет контроллер корневого представления исходным содержимым раскадровки, которое должно вернуть приложение на начальный экран.

Я видел, что это было представлено как решение проблем входа/выхода из системы в другом месте в Интернете, но я не уверен, есть ли переход, который можно оживить там.

+0

Я действительно смог сделать это в блоке завершения для presentViewController. Я пробовал это раньше, но, оказывается, у меня был цикл удержания где-то еще, что мешало моему предыдущему диспетчеру просмотра быть выпущенным. Я неправильно предположил, что удержание происходит от указателя к представлениюViewController в контроллере представления, который я представлял. –

0

Я думаю, что ваш подход неправильный. Исправить меня еще мудрый.

Механизмы входа должны быть одноточечными. Следовательно, вы должны определить свои контроллеры, модели, представления все как экземпляры singleton. Например, посмотрите на мой следующий код.

static id objectInstance; 

+ (id) sharedInstanceID { 
    if (!objectInstance) { 
     objectInstance = [[YourClass alloc] init]; 
    } 
    return objectInstance; 
} 

Дайте мне знать, если это поможет вам.

+0

Я использую раскадровки, и поэтому каждый просмотр контроллера создается (и также освобождается) от раскадровки. Мое приложение по своей природе может быть немного интенсивным, поэтому я не хочу, чтобы в памяти хранилось много дополнительных контроллеров представлений. По сути, при выходе из системы я хочу, чтобы он забыл все, что знал, поэтому я могу начать все заново. –

+0

Я думаю, что ваш вопрос на более высоком уровне против программирования (аннотация с архитектурой вашего приложения). Можете ли вы поделиться архитектурой своего приложения? Вы используете навигационные контроллеры, если это так, вы можете просто вызвать 'self.navigationController popToRootViewController' или так. Кроме того, я уверен, что вы используете какой-то стек или очередь для поддержки всех контроллеров, и снова вы можете освободить их. Мне нужно больше информации, чтобы помочь вам. –

+0

Нет навигационных контроллеров. Приложение используется для бизнеса, как киоск, каждый пользователь регистрируется, завершает задачу, а затем выходит из системы. Задачи могут быть длинными и задействованными, охватывая несколько экранов и могут быть выведены в любой момент путем выхода из системы. Когда пользователь выходит из системы, все состояния очищаются. По сути, я хочу выполнить анимированный переход на экран входа в систему и сбросить все остальное.Если это поможет, я вкратце рассмотрел возможность замены rootViewController окна контроллером входа, но я не мог заставить анимированный переход работать для него. –

Смежные вопросы