Я ломал голову над попыткой выяснить небольшую ошибку в половине приложения для iPad, над которым я работаю. Это связано с проблемой в этом посте:
iPad SplitViewController Странное поведение
На самом деле, я должен сказать, что это точно такая же проблема. Тем не менее, единственное решение, данное здесь, не будет работать для меня, так как мое приложение имеет главное меню, которое переключается на представление моего UISplitViewController при нажатии соответствующей кнопки. Контроллер и содержащиеся в нем контроллеры представления не создаются до нажатия кнопки. Таким образом, я не могу установить делегат контроллера перед вызовом [window makeKeyAndVisible], так как это было сделано задолго до загрузки моего главного меню.
Теперь я добавил несколько вызовов NSLog к функции willHideViewController делегата следующим образом:
NSLog(@"Will hide popover view controller!");
NSLog(@"self=%p",self);
NSLog(@"%@",detailPad.tbToolbar);
Когда я запускаю приложение на iPad в портретном режиме и нажимаю, чтобы переключиться на контроллер разделенного представления, действительно вызывается willHideViewController делегата, но когда он заканчивается, у меня остается пустая панель инструментов в подробном представлении. , Странная часть этого заключается в том, что третий вызов NSLog, который должен выводить информацию о панели инструментов контроллера подробного представления, вместо этого выплевывает (null). Это немного странно из-за того, что предыдущий код устанавливает элементы панели инструментов, и этот код не вызывает единственное исключение, даже если панель инструментов явно не существует.
[Session started at 2011-02-23 16:16:59 -0500.]
2011-02-23 16:17:02.626 TEST[33835:207] Will hide popover view controller!
2011-02-23 16:17:02.628 TEST[33835:207] self=0x5351bc0
2011-02-23 16:17:02.629 TEST[33835:207] (null)
2011-02-23 16:17:14.487 TEST[33835:207] Will hide popover view controller!
2011-02-23 16:17:14.488 TEST[33835:207] self=0x5351bc0
2011-02-23 16:17:14.490 TEST[33835:207] <UIToolbar: 0x56201a0; frame = (0 0; 703 44); autoresize = W+BM; layer = <CALayer: 0x5620260>>
2011-02-23 16:24:52.158 TEST[33835:207] Will hide popover view controller!
2011-02-23 16:24:52.159 TEST[33835:207] self=0x5351bc0
2011-02-23 16:24:52.160 TEST[33835:207] <UIToolbar: 0x56201a0; frame = (0 0; 703 44); autoresize = W+BM; layer = <CALayer: 0x5620260>>
Как видите, последующие журналы показывают, что панель инструментов жива и исправна, и мы знаем, что вызовы поступают с одного и того же объекта во всех случаях. Эти более поздние вызовы происходили просто из поворота в ландшафт, а затем обратно в портрет, так что это точно такой же контроллер детального просмотра.
Итак, мой вопрос заключается в следующем: что может привести к тому, что панель инструментов вернется к нулю в первый раз, но затем будет работать должным образом, не делая ничего, кроме поворота iPad, и что я могу сделать, чтобы исправить это?
Заранее спасибо,
Райан