我有一个UILabel和一个复选框按钮。选中复选框按钮时,显示uilabel,否则显示该标签5秒钟并隐藏该标签。当我转到其他视图并返回到该视图时,我的应用程序崩溃了,并说“ [_UILabelLayer isHidden]:已发送给已取消分配的消息实例 ”
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
}
谁能告诉我为什么这崩溃了?
[self performSelector:@selector(hideLabel) withObject:nil afterDelay:5];
造成问题。根据我的理解,您正在弹出视图控制器,然后又回到它。弹出控制器时,将清除并释放所有关联的视图。现在,在您的情况下,这会在5秒的时间范围内发生。因此,当计时器命中时,它找不到该标签(已被释放)。
因此,您可以使用nstimer并在屏幕消失后立即使它无效,并在下次出现屏幕时根据对勾标记状态隐藏/取消隐藏标签。
请让我知道这可不可以帮你。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句