2009-06-08 5 views
0

ナビゲーションコントローラを使用する単純なアプリケーションを作成すると、一貫したクラッシュが発生します。UINavigationControllerで前後にナビゲートするとクラッシュする

基本的に最初のテーブルのアイテムを選択すると、&がサブビューコントローラをプッシュし、戻るボタンが正常に機能します。しかし、アイテムを再び選択しようとすると、GDBで異常なクラッシュが発生します。エラーは表示されません。デバッガが情報を吐き出し、アプリケーションがハングするだけです。私は周りのビューコントローラを維持する必要がないので、私は単にそれを毎回作成して、私は完成していたときにそれを解放

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    UIViewController *viewController; 

    NSString *selection = [items objectAtIndex:indexPath.row]; 
    if([selection isEqualToString:@"Artists"]) { 
     NSLog(@"Selected artists"); 
     if(artistsViewController == nil) { 
      NSLog(@"creating ArtistsViewController"); 
      artistsViewController = [[ArtistsViewController alloc] init]; 
     } 

     viewController = artistsViewController; 
    } 

    if(viewController != nil) { 
     [self.navigationController pushViewController:viewController animated:YES]; 
     [viewController release]; 
    } 
} 

:私はビューコントローラをプッシュするのはここ

です。

ここには役に立たないコンソールログがあります。注意してくださいどのように言う「選択したアーティスト」とし、最初の時間を「ArtistsViewControllerを作成する」、それは「選択したアーティスト」とし、それが死ぬと言う2回目:

[Session started at 2009-06-08 18:00:16 -0500.] 
2009-06-08 18:00:18.856 Pocket Tabs[96726:20b] View did load 
2009-06-08 18:00:18.862 Pocket Tabs[96726:20b] loading data for tableview 
2009-06-08 18:00:20.265 Pocket Tabs[96726:20b] Selected artists 
2009-06-08 18:00:20.265 Pocket Tabs[96726:20b] creating ArtistsViewController 

[Session started at 2009-06-08 18:00:22 -0500.] 
2009-06-08 18:00:22.061 Pocket Tabs[96726:20b] Selected artists 
Loading program into debugger… 
GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008) 
Copyright 2004 Free Software Foundation, Inc. 
GDB is free software, covered by the GNU General Public License, and you are 
welcome to change it and/or distribute copies of it under certain conditions. 
Type "show copying" to see the conditions. 
There is absolutely no warranty for GDB. Type "show warranty" for details. 
This GDB was configured as "i386-apple-darwin".warning: Unable to read symbols for "/System/Library/Frameworks/UIKit.framework/UIKit" (file not found). 
warning: Unable to read symbols from "UIKit" (not yet mapped into memory). 
warning: Unable to read symbols for "/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics" (file not found). 
warning: Unable to read symbols from "CoreGraphics" (not yet mapped into memory). 
Program loaded. 
sharedlibrary apply-load-rules all 
Attaching to program: `/Users/ben/Library/Application Support/iPhone Simulator/User/Applications/F063AD87-BEFE-4CB9-AE26-E7149C8D7D4C/Pocket Tabs.app/Pocket Tabs', process 96726. 
(gdb) 

任意のアイデアは?私は困惑している。

編集:私はそれを理解しました。サブビューの再割り当てを避けるために、これをインスタンス変数に代入していたように見えます。ギアを切り替えて忘れていなければなりません。インスタンス変数ArtistsControllerを削除すると、それが解決されました。

答えて

2

これはメモリ管理と関係していると思います。 viewControllerをローカル変数として使用する代わりに、プロパティとして設定してリリースを取り除きます。

@property(nonatomic, retain) UIViewController *viewController; 

シンセ(.mファイル内)ゲッターとセッター

@synthesize viewcontroller; 

をし、それをアクセスするには、ドットシンタックスを使用します。

self.viewController 

これは、1つが存在する場合、古いコントローラを解放し、ナビゲーションコントローラがあることを、それを必要とするとき、オブジェクトがまだ残っていることを保証します。

+0

私はこれを行うことができましたが、私のコードがなぜ機能していないのか本当に知りたいです。そうでなければ、私は偶然によってプログラミングしています... :) –

+0

私は同意します。あなたがそれを把握したら、答えを投稿してください。私が記号を読むことができないのを見たのは、間違ってクロスコンパイルされたライブラリを使用していたときだけです。私はそれがここでは関係があるとは思わない。 –

+0

私はsqliteを使用していますが、正しく機能しています –

関連する問題