2012-02-26 2 views
0

Я (думаю) Я исследовал эту проблему широко в документах Apple и в Интернете, как здесь, так и в других местах. Однако после нескольких часов устранения неполадок у меня нет идей. Мой диспетчер просмотра Modal отказывается уволить себя в соответствующее время.Storyboard Modal ViewController не будет уволен; попробовали все

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

Проблема:


Это код, содержащийся в prepareForSegue для представляющего ViewController, во всей своей полноте:

if ([segue.identifier isEqualToString:@"DISCREPANCYVC"]) { 

    DiscrepancyViewController *destController = segue.destinationViewController; 
    destController.discrepancyDelegate = self; 
} 

Контроллер модальных содержит два UIPickerViews, которые ведут себя должным образом. Представления picker используются для построения «classicString», NSString.

У меня есть кнопка «Готово» на взгляд модальной, которая при нажатии вызывает этот метод/селектор (в соответствии с определением протокола, который я настроил):

[self.DiscrepancyDelegate didFinishWithClassification:classificationString]; 

Метод didFinishWithClassification выглядит следующим образом:

- (void)didFinishWithClassification:(NSString *)classification { 

    [self dismissModalViewControllerAnimated:NO]; 

Если это имеет значение, протокол определяется как

@protocol DiscrepancyViewControllerDelegate <NSObject> 
@required 
    - (void)didFinishWithClassification:(NSString *)aClassification; 

@end 

Свойства, которое содержит ссылку обратно в режим предлежащего выглядит как:

@property (strong, nonatomic) id <DiscrepancyViewControllerDelegate> DiscrepancyDelegate; 

Есть четыре дополнительных свойства (сильный, неатомический), которые используются для размещения четырех массивов, которые заполняют UIPickerViews (каждый сборщик имеет два компоненты).

Я пробовал как анимированные, так и неанимированные увольнения без изменений в поведении.

Что может быть причиной этого? Я использую ARC, поэтому мне не нужно ничего отпускать, прежде чем пытаться сбрасывать модальный экран, правильно? И из того, что я прочитал, viewDidUnload() не обязательно будет срабатывать в этой ситуации (и это не срабатывает в моем случае).

Справка!

Thx,

Тед

+0

Попробуйте использовать слабое свойство – Slappy

ответ

0

Есть 9 шагов, необходимых, чтобы сделать работу протокола делегата. Проверьте их все в моем ответе here.

Кроме того, утверждение: «Я знаю, что диспетчером, который представил модальное представление, должен быть отклонен, чтобы модальные контроллеры были отклонены» не соответствует действительности. Он предлагается в качестве хорошей формы, но вы можете поместить инструкцию отклонения в контроллер модального представления, и если у вас нет другой причины для делегирования, я бы сделал это, а не выдержал сложность настройки протокола делегата.

+0

Я проверил все свои шаги против сайта Wenderlich, и все они в порядке. Я изменил устаревший вызов rejectModal на rejectViewController, без изменений в поведении - экран по-прежнему не исчезает. Что еще может вызвать экранирование? Кто угодно? – NightStalker

0

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

Совет: перейдите к соединениям с тонкой зубной гребенкой. Они могут маскировать проблемы, не представляя себя ошибками.

Grrrrrrrr.