[_UILabelLayer isHidden]:发送到解除分配的实例的消息

时间:2014-11-27 02:31:04

标签: ios objective-c uilabel

我有一个UILabel和一个复选框按钮。选中复选框按钮后,显示uilabel,否则显示标签5秒钟并隐藏标签。当我转到其他视图并返回此视图时,我的应用程序崩溃说" [_ UILabelLayer isHidden]:message发送到解除分配的实例"

   NSString *display = [NSString stringWithFormat:@"Scanned!\n\nFormat: %@\n\nContents:\n%@", formatString, result.text];

if(checkbox==NO){

   [self hideLabel:display];

  }

 //method to hide the label for 5 seconds

- (void)hideLabel:(NSString*)text{

self.decodedLabel.hidden=NO;
[self performSelector:@selector(hideLabel) withObject:nil afterDelay:5];//3sec

 }


 -(void)hideLabel{

 self.decodedLabel.hidden= YES;   //app crashed at this point

 }

有谁能告诉我为什么会崩溃?

1 个答案:

答案 0 :(得分:1)

[self performSelector:@selector(hideLabel) withObject:nil afterDelay:5]; 

导致问题。根据我的理解,你正在弹出视图控制器,然后回到它。弹出控制器时,将清除并释放所有关联的视图。现在在你的情况下,这发生在5秒的范围内。因此,当计时器命中时,它找不到该标签(已经解除分配)。

因此,您可以使用nstimer并在屏幕消失后立即使其无效,并在下次显示屏幕时根据复选标记状态隐藏/取消隐藏标签。

如果有帮助,请告诉我。