2013-03-13 56 views
0

我有一个小的子类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); 
    } 
} 

回答

0

的观点可能不被释放马上。试试看:if([noInternetView superview]!= nil){}

+0

我修复它,而不是初始化它与self.parentViewController.view不Self.view,它的作品完美! – 2013-03-13 01:41:07

相关问题