1

我认为这可能会导致错误,因为我在几个类中使用了按钮的图层属性。我认为这可能是原因,但我不确定。

现在,当我在一段时间后(最多 5 分钟)在 iPod 上运行我的应用程序时,应用程序崩溃并显示以下错误消息:

-[CALayer release]: message sent to deallocated instance 0xc60a690

我该如何解决这个问题?

4

3 回答 3

0

If you wanna remove the class self in the current view, and it had have IBOutlets connect with the removed view that you did need to setup the IBOutlets to nil, it still works for me, like this :

-(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];
}
于 2012-09-20T02:19:41.323 回答
0

您收到错误是因为一个对象已被释放并且您正试图向它发送一条消息。

如果没有看到您的代码,很难说出您需要做什么才能解决问题。

我建议您阅读 Objective-c 中的内存管理。例如,

Apple 内存管理文档

但是还有很多其他的文件。如果你不理解这些概念,那么你将来会遇到很多问题。

于 2012-04-11T10:52:15.567 回答
-4

我认为您没有在 viewDidLoad 方法中保留按钮,这就是为什么在一段时间后它们会释放。只需在分配它的末尾添加保留或将其写入@property..

于 2012-04-11T10:46:20.550 回答