我认为它可能会导致错误,因为我在几个类中使用了按钮的图层属性。我想这可能是原因,但我不确定。
现在,当我在某个时间(最多5分钟)后在iPod上运行我的应用程序时,应用程序崩溃并显示以下错误消息:
-[CALayer release]: message sent to deallocated instance 0xc60a690
如何解决这个问题?
答案 0 :(得分:0)
您收到错误是因为某个对象已被取消分配,而您正试图向其发送消息。
如果没有看到您的代码,很难说您需要做些什么才能解决问题。
我建议您阅读objective-c中的内存管理。例如,
Apple Documentation for Memory Management
但是还有很多其他文件。如果你不理解这些概念,那么你将来会遇到很多问题。
答案 1 :(得分:0)
如果你想删除当前视图中的类self,并且它已经将IBOutlets连接到你需要将IBOutlets设置为nil的已删除视图,它仍然适用于我,如下所示:
-(void)backRootController{ //I wanna change the current viewController to rootViewController on self.tabBarController. RootViewController *_rootViewController = [[RootViewController alloc] init]; NSArray *_viewControllers = self.tabBarController.viewControllers; NSMutableArray *_tabs = [NSMutableArray array]; for( UIViewController *_tabViewController in _viewControllers ){ if( _tabViewController == self ){ _rootViewController.tabBarItem = _tabViewController.tabBarItem; _tabViewController = _rootViewController; } [_tabs addObject:_tabViewController]; } self.tabBarController.viewControllers = [NSArray arrayWithArray:_tabs]; //To setup the IBOutlets to nil to avoid [CALayer release] crash. ( UILabel, UIView, UIImageView ) self.outPreviewLabel = nil; self.outPreviewView = nil; self.outPreviewImageView.image = nil; self.outPreviewImageView = nil; //Then remove the view and exchanged current controller. [self.view removeFromSuperview]; [self removeFromParentViewController]; [_rootViewController release]; }
答案 2 :(得分:-4)
我认为你没有在viewDidLoad方法中保留你的按钮,这就是为什么在一段时间后他们会解除分配。只需在分配它的末尾添加retain或在@property中编写它。