0

ナビゲーションベースのiPhoneアプリを持っています。テーブルビューのセルを押すと、新しいUIViewControllerがナビゲーションスタックにプッシュされます。このビューコントローラでは、viewDidLoadメソッドでカスタムtitleViewを設定しています。

- (void)viewDidLoad {
    [super viewDidLoad];

    // Setup custom navigation title
    [self setTitle:@"Mediaportal"];
    navItem = [[NavigationBarTitleItemViewController alloc] initWithNibName:@"NavigationBarTitleItem" bundle:nil];
    [navItem setTitle:[theServer name]];
    [navItem setSubTitle:@""];
    [self.navigationItem setTitleView:navItem.view];

…
}

RootViewControllerに戻ったら、次のようにします。

[self.navigationController popToRootViewControllerAnimated:YES];

次のエラー(NSZombieEnabled = YES)でアプリがクラッシュします。

*** -[CALayer retain]: message sent to deallocated instance 0x5a5fd80

私が見ることができることから、RootViewControllerは、2番目のViewControllerで割り当てが解除されたカスタムtitleViewにアクセスしようとします。コード内のカスタムtitleView部分をコメントアウトすると、アプリは機能します。2番目のViewControllerの割り当てが解除される前に、navigationItem.titleViewをnilに設定しようとしましたが(アップルのドキュメントにあります)、それは役に立ちません。

このクラッシュを防ぐために私ができることのヒントはありますか?

ありがとう、マーク。

4

2 に答える 2

0

1か月ほど前に、まったく同じエラーが発生しました。まったく同じ状況です。それは私をナッツに駆り立てました。

私もポップしていたviewControllerがまったく割り当て解除されていないことを発見しました。そのビューにカスタム UIButton サブクラスを追加しましたが、2 番目のビューがプッシュされたときに割り当てが解除されました。そのため、ポップバックすると、UIButton はありませんでした。

ポップバック先のビューをチェックして、割り当てを解除しているクラスがないこと、または知らないうちに自動解放されているクラスがないことを確認します。

お役に立てれば。

于 2010-08-04T10:44:44.017 に答える
0

私はついにその解決策を見つけました(非常に単純なものです)。プロパティを介して navItem を割り当てて初期化する必要があり、その後保持されます。

self.navItem = [[NavigationBarTitleItemViewController alloc] initWithNibName:@"NavigationBarTitleItem" bundle:nil];
于 2010-09-30T19:02:00.487 に答える