Я ломал голову, пытаясь найти небольшую ошибку в 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, и что я могу сделать, чтобы это исправить?
Заранее спасибо, Райан