2012-02-23 12 views
1

メモリ警告を正常に処理するためにView Controllerを適切に設定する方法を少し苦労しています。iOSメモリ警告table複数ビューアプリケーションでのEXC_BAD_ACCESSクラッシュの表示

現時点では、アプリケーションがメモリ警告を受け取るたびに、ナビゲーションコントローラスタックのビューからEXC_BAD_ACCESSクラッシュが発生しています。

テーブルビューでアクセスできません。ここで私はそれをインスタンス化しています方法は次のとおりです。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    UITableView *table = [[[UITableView alloc] initWithFrame:CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, self.view.bounds.size.width, self.view.bounds.size.height - self.navigationController.navigationBar.bounds.size.height) style:UITableViewStyleGrouped] autorelease]; 
    table.dataSource = self; 
    table.delegate = self; 

    self.tableView = table; 
    [self.view addSubview:table]; 
    [table release]; 

    ...other stuff... 
} 

そして、ここでは私のviewDidUnloadです:

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
    self.tableView = nil; 
} 

メモリ警告時には、viewDidUnloadは予想通り、と呼ばれるが、私はself.tableView = nil行にEXC_BAD_ACCESSのクラッシュを取得しています。

テーブルビューを間違った場所に設置していますか?私はnibファイルを使用していないので、別の場所にビルドする必要がありますか?私は何とかそれをView Controllerに間違って渡していますか?

ご協力いただければ幸いです。私はまだメモリ警告時に起こる一連の出来事を突き詰めていません。そして、レベル1のメモリ警告は不愉快に共通しているようです。

答えて

2

tablereleaseを2回呼び出しています。一度にすると、作成時にはautoreleaseと、サブビューとして追加された後には[table release];と表示されます(self.view)。 tableViewのプロパティが 'retain'の場合、割り当て時に(ドット構文で割り当てられている場合)保持されます。また、addSubviewは追加時にtableを保持します。だから、あなたはそこにautoreleaseを残しておく必要があります - あなたはself.tableView = table;を言うときそれが起こる保持によって相殺されること繰延リリース(以降

+0

を、私は見ました – Murdock

+0

また、私はちょうどUITableViewControllerを使用することをお勧めします - あなたのためのUITableViewの多くのallocなどを行います。 。 –

+0

ええ、私は便宜的に 'UITableViewController'を使用していましたが残念ながら私たちはいくつかの画面で十分なビューのカスタマイズを行う必要があります。自分自身を見てください。再度、感謝します! – Murdock

2

これ試してみてください:うん

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    UITableView *table = [[[UITableView alloc] initWithFrame:CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, self.view.bounds.size.width, self.view.bounds.size.height - self.navigationController.navigationBar.bounds.size.height) style:UITableViewStyleGrouped] autorelease]; 
    table.dataSource = self; 
    table.delegate = self; 

    self.tableView = table; 
    [self.view addSubview:table]; 
    //[table release]; You have already release table with autorelease. 

    ...other stuff... 
} 
+0

ありがとう@fannheyward。あなたは正しい。私はここで私の受け入れられた答えのための応答速度で行くつもりです。 – Murdock

関連する問題