3

UINavigationController がビュー コントローラーをポップするときに、UINavigationBar がアイテムをポップしないという問題があります。

私は次のようなスタックを見てきました:

  • 割り当てられたナビゲーション コントローラーの予想数 (計器でチェック済み)
  • スタック上に正しい数のコントローラーがあります。(デバッグロギング)
  • ナビゲーション項目がポップされていません。(デバッグロギング)

これが私がしたことです。

super を呼び出した後、いくつかのログ ステートメントを viewDidLoad メソッドに挿入しました。

NSLog(@"%@", [self navigationController]);
NSLog(@"%@", [[self navigationController] viewControllers]);
NSLog(@"%@", [[self navigationController] navigationBar]);
NSLog(@"%@", [[[self navigationController] navigationBar] items]);

初期ビューがロードされた後。

2009-10-09 16:42:51.706 Bob[11657:207] <UINavigationController: 0x243bb0>
2009-10-09 16:42:51.720 Bob[11657:207] (
    <MediaBrowser: 0x2354c0>
)
2009-10-09 16:42:51.742 Bob[11657:207] <UINavigationBar: 0x243e50; frame = (0 20; 320 44); autoresize = W; layer = <CALayer: 0x243ed0>>
2009-10-09 16:42:51.758 Bob[11657:207] (
    <UINavigationItem: 0x242d60>
)

すべてが良さそうです。2 番目のコントローラーを押します。

2009-10-09 16:43:11.800 Bob[11657:207] -[MediaBrowser beginLoading] [Line 261] 
2009-10-09 16:43:12.320 Bob[11657:207] -[MediaBrowser loadingComplete] [Line 269] 
2009-10-09 16:43:12.587 Bob[11657:207] <UINavigationController: 0x243bb0>
2009-10-09 16:43:12.654 Bob[11657:207] (
    <MediaBrowser: 0x2354c0>,
    <MediaBrowser: 0x2c1cc0>
)
2009-10-09 16:43:12.685 Bob[11657:207] <UINavigationBar: 0x243e50; frame = (0 20; 320 44); autoresize = W; layer = <CALayer: 0x243ed0>>
2009-10-09 16:43:12.734 Bob[11657:207] (
    <UINavigationItem: 0x242d60>,
    <UINavigationItem: 0x2c63b0>
)

ここでも予期しないことは何もありません。3 番目のコントローラーを押します。

2009-10-09 16:43:19.934 Bob[11657:207] -[MediaBrowser beginLoading] [Line 261] 
2009-10-09 16:43:20.388 Bob[11657:207] -[MediaBrowser loadingComplete] [Line 269] 
2009-10-09 16:43:20.928 Bob[11657:207] <UINavigationController: 0x243bb0>
2009-10-09 16:43:20.962 Bob[11657:207] (
    <MediaBrowser: 0x2354c0>,
    <MediaBrowser: 0x2c1cc0>,
    <MediaBrowser: 0x4027e20>
)
2009-10-09 16:43:21.003 Bob[11657:207] <UINavigationBar: 0x243e50; frame = (0 20; 320 44); autoresize = W; layer = <CALayer: 0x243ed0>>
2009-10-09 16:43:21.039 Bob[11657:207] (
    <UINavigationItem: 0x242d60>,
    <UINavigationItem: 0x2c63b0>,
    <UINavigationItem: 0x4028880>
)

すべて良い。コントローラをポップしましょう

2009-10-09 16:43:26.935 Bob[11657:207] <UINavigationController: 0x243bb0>
2009-10-09 16:43:26.945 Bob[11657:207] (
    <MediaBrowser: 0x2354c0>,
    <MediaBrowser: 0x2c1cc0>
)
2009-10-09 16:43:26.964 Bob[11657:207] <UINavigationBar: 0x243e50; frame = (0 20; 320 44); autoresize = W; layer = <CALayer: 0x243ed0>>
2009-10-09 16:43:26.977 Bob[11657:207] (
    <UINavigationItem: 0x242d60>,
    <UINavigationItem: 0x2c63b0>,
    <UINavigationItem: 0x4028880>
)

うーん。何かがうまくいかない。コントローラーはポップしましたが、ナビゲーション項目はまだそこにあります。くすくす笑うために、もう一度押してみましょう。

009-10-09 16:44:05.878 Bob[11657:207] <UINavigationController: 0x243bb0>
2009-10-09 16:44:05.908 Bob[11657:207] (
    <MediaBrowser: 0x2354c0>,
    <MediaBrowser: 0x2c1cc0>,
    <MediaBrowser: 0x407eb00>
)
2009-10-09 16:44:05.951 Bob[11657:207] <UINavigationBar: 0x243e50; frame = (0 20; 320 44); autoresize = W; layer = <CALayer: 0x243ed0>>
2009-10-09 16:44:05.996 Bob[11657:207] (
    <UINavigationItem: 0x242d60>,
    <UINavigationItem: 0x2c63b0>,
    <UINavigationItem: 0x4028880>,
    <UINavigationItem: 0x407f280>
)

コントローラー スタックは問題ないようですが、ナビゲーション アイテム スタックは多くの問題を抱えています。最後にもう一度ポップしましょう。

2009-10-09 16:44:17.770 Bob[11657:207] <UINavigationController: 0x243bb0>
2009-10-09 16:44:17.776 Bob[11657:207] (
    <MediaBrowser: 0x2354c0>,
    <MediaBrowser: 0x2c1cc0>
)
2009-10-09 16:44:17.785 Bob[11657:207] <UINavigationBar: 0x243e50; frame = (0 20; 320 44); autoresize = W; layer = <CALayer: 0x243ed0>>
2009-10-09 16:44:17.793 Bob[11657:207] (
    <UINavigationItem: 0x242d60>,
    <UINavigationItem: 0x2c63b0>,
    <UINavigationItem: 0x4028880>,
    <UINavigationItem: 0x407f280>
)

したがって、コントローラースタックは問題ありません。一方、ナビゲーション項目にはいくつかの問題があります。

私は困惑しています。私は何か奇妙な/奇妙な/間違ったことをしていると確信していますが、それを見ることができれば気になります。私が行っている唯一の操作は、(コントローラーのナビゲーション項目プロパティを介して) カスタム rightBarItem を準備することです。

ここまで来たら、ありがとう。ここからどこへ行くかについての考えをいただければ幸いです。

4

1 に答える 1

3

ばっちり成功。

それで、は愚かなことをしていたことがわかりました。

NSMutableArray の内部カテゴリに pop メソッドを追加しました。そのメソッドは正しくポップしていませんでした。UINavigationBar は、pop メソッドも NSMutableArray に追加する必要があります。私のバグの 1 つは、UIBarItem のポップに勝って壊れていました。

于 2009-10-09T07:48:15.410 に答える