いくつかのクラスでボタンのレイヤープロパティを使用しているため、エラーが発生する可能性があると思います。これが原因かと思いますが定かではありません。
しばらくしてから (最大 5 分)、iPod でアプリケーションを実行すると、アプリケーションがクラッシュし、次のエラー メッセージが表示されます。
-[CALayer release]: message sent to deallocated instance 0xc60a690
この問題を解決するにはどうすればよいですか?
オブジェクトの割り当てが解除され、メッセージを送信しようとしているため、エラーが発生しています。
コードを見ないと、問題を解決するために何をする必要があるかを判断するのは困難です。
Objective-C のメモリ管理について読んでおくことをお勧めします。例えば、
しかし、それに関する他の多くの文書があります。これらの概念を理解していないと、将来多くの問題が発生することになります。
現在のビューでクラス self を削除したい場合、IBOutlets を nil に設定する必要がある削除されたビューに IBOutlets が接続されていた場合、次のように動作します。
-(void)backRootController{
//self.tabBarController で現在の viewController を rootViewController に変更したい。
RootViewController *_rootViewController = [[RootViewController 割り当て] init];
NSArray *_viewControllers = self.tabBarController.viewControllers;
NSMutableArray *_tabs = [NSMutableArray 配列];
for( UIViewController *_tabViewController in _viewControllers ){
if( _tabViewController == 自己){
_rootViewController.tabBarItem = _tabViewController.tabBarItem;
_tabViewController = _rootViewController;
}
[_tabs addObject:_tabViewController];
}
self.tabBarController.viewControllers = [NSArray arrayWithArray:_tabs];
// [CALayer release] クラッシュを回避するために IBOutlets を nil に設定します。( UILabel、UIView、UIImageView )
self.outPreviewLabel = nil;
self.outPreviewView = nil;
self.outPreviewImageView.image = nil;
self.outPreviewImageView = nil;
//その後、ビューを削除し、現在のコントローラーを交換します。
[self.view removeFromSuperview];
[self removeFromParentViewController];
[_rootViewController リリース];
}
viewDidLoad メソッドでボタンを保持していないと思います。そのため、しばらくするとボタンの割り当てが解除されます。割り当てる場所の最後にretainを追加するか、@property..に書き込むだけです。