2011-09-08 167 views
3

这是一个非常简单的问题,但我不知道为什么会发生。在我的头文件中,我声明了一个UIButton *leftButton。在viewDidLoad方法我在其他一些方法,我做这个leftButton=[UIButton buttonWithType:UIButtonTypeRoundedRect];UIButton导致崩溃

然后:

leftButton.frame=newFrame; 
    leftButton.tag=i; 
    [leftButton addTarget:self action:@selector(leftButtonSelected:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:leftButton]; 

但是我不断收到崩溃当上述方法被调用。有时候我会收到一条消息,有时候它会崩溃而没有消息。我无法真正复制任何崩溃消息,现在我所得到的只是一个普通的崩溃,但它不断从诸如[UIGestureRecognizer setFrame]之类的奇怪问题崩溃导致问题或[WebView setFrame]或其他原因..出于某种原因它一直认为leftButton不是UIButton,但事实并非如此。在我的整个项目中没有其他名称为leftButton。有任何想法吗?

+0

为了防止你真的排除了某些NSLog的明显问题 - 在这些情况下,我对Xcode中发生的事情感到困惑,我删除了DerivedData。有时Xcode甚至不会重新编译我的文件,即使它说 - 它的值得一试... - 只是意识到 - 你很可能不使用ARC - 所以它可能是一个内存问题,在按钮丢失 – user387184

回答

7

您的第一个方法是返回一个自动释放对象,很可能它在您调用第二个方法时已经释放。请将按钮保留在第一种方法中,或者使用保留的属性来保留它,而不是ivar。

另外,请记住在最后的dealloc方法中释放它。

+0

如何我在第一种方法中保留它吗? – Snowman

+1

leftButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];在手机上打字,没有格式化,对不起! – jrturton

+0

谢谢,这个修好了:) – Snowman