我有一个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
}
有谁能告诉我为什么会崩溃?
答案 0 :(得分:1)
[self performSelector:@selector(hideLabel) withObject:nil afterDelay:5];
导致问题。根据我的理解,你正在弹出视图控制器,然后回到它。弹出控制器时,将清除并释放所有关联的视图。现在在你的情况下,这发生在5秒的范围内。因此,当计时器命中时,它找不到该标签(已经解除分配)。
因此,您可以使用nstimer并在屏幕消失后立即使其无效,并在下次显示屏幕时根据复选标记状态隐藏/取消隐藏标签。
如果有帮助,请告诉我。