iOS检查视图是否仍然存在
问题描述:
我有一个小的子类UIView,用于在连接超时时向用户显示“连接超时”动画。我在该方法中添加了一些代码:scrollViewDidScroll,以便当用户滚动表格时,子视图在呈现时不会滚动。但是,当连接超时视图完成动画并且视图从超级视图中移除时,无论何时滚动tableview,我都会收到一条消息,发送到解除分配的实例错误。我进行了检查,看看子视图是否为零,但似乎没有工作。我将如何避免这种情况?iOS检查视图是否仍然存在
如何呈现子视图:
// Show No Internet Message
noInternetView = [FCDataController presentNoInternetMessage:self.view];
noInternetViewOrigin = noInternetView.frame.origin;
视图是如何显示在我的FCDataController类:
+ (NoInternetView *)presentNoInternetMessage:(UIView *)view {
NoInternetView *internet = [[NoInternetView alloc] initWithFrame:CGRectMake(0, view.bounds.size.height, view.bounds.size.width, 30) andPosition:NoInternetPositionBottom];
[view addSubview:internet];
CGRect position = CGRectMake(0, view.bounds.size.height - 30, view.bounds.size.width, 30);
[UIView animateWithDuration:0.4
delay:0.5
options:UIViewAnimationOptionCurveEaseOut
animations:^{
internet.frame = position;
}
completion:^(BOOL finished) {
NSLog(@"DONE");
[self performSelector:@selector(hideInternetMessageForView:) withObject:view afterDelay:2.0];
}];
return internet;
}
+ (BOOL)hideInternetMessageForView:(UIView *)view {
NoInternetView *internet = [self NoInternetForView:view];
if (internet != nil) {
CGRect remove = CGRectMake(0, view.bounds.size.height, view.bounds.size.width, 30);
[UIView animateWithDuration:0.5
delay:1.0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
internet.frame = remove;
}
completion:^(BOOL finished) {
NSLog(@"DONE");
[internet removeFromSuperview];
}];
return YES;
}
return NO;
}
+ (NoInternetView *)NoInternetForView:(UIView *)view {
NoInternetView *internet = nil;
NSArray *subviews = view.subviews;
Class internetClass = [NoInternetView class];
for (UIView *aView in subviews) {
if ([aView isKindOfClass:internetClass]) {
internet = (NoInternetView *)aView;
}
}
return internet;
}
ScorllView方法:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (noInternetView != nil) {
noInternetView.frame = CGRectMake(self.noInternetViewOrigin.x, self.noInternetViewOrigin.y + self.tableView.bounds.origin.y, noInternetView.frame.size.width, noInternetView.frame.size.height);
}
}
答
的观点可能不被释放马上。试试看:if([noInternetView superview]!= nil){}
我修复它,而不是初始化它与self.parentViewController.view不Self.view,它的作品完美! – 2013-03-13 01:41:07