使用animateWithDuration完成导致exc_bad_access

时间:2011-05-11 00:06:18

标签: iphone objective-c-blocks

我正在尝试在名为addToPlaylist和removeFromPlayList的UITableViewCell中设置2个UIButton(在刷卡后将它们设置为向右动画)并使用块如下

[UIView animateWithDuration:0.25 animations:^{

    self.addToPlaylist.center      = CGPointMake(contentsSize.width + (buttonSize.width / 2), (buttonSize.height / 2));
    self.removeFromPlaylist.center = CGPointMake(contentsSize.width + (buttonSize.width / 2), (buttonSize.height / 2));
    myImage.alpha = 1.0;

}
 completion:^ (BOOL finished) 
 {
     if (finished) {
         // Revert image view to original.
         NSLog(@"Is completed");
         self.addToPlaylist.hidden       = YES;
         self.removeFromPlaylist.hidden  = YES;
         self.hasSwipeOpen               = NO;
     }
 }];

完成后我想隐藏按钮以尝试减少重绘滚动等。

此代码位于' - (void)swipeOff'中,在UITableViewControllers方法中调用scrollViewWillBeginDragging,如下所示:

- (void)scrollViewWillBeginDragging:(UIScrollView *) scrollView
{
   for (MediaCellView* cell in [self.tableView visibleCells]) {
        if (cell.hasSwipeOpen) {
           [cell swipeOff];
        }
    }
}

问题是完成代码,如果我删除它或将其设置为nil都是好的,如果我包含它我得到一个EXC_BAD_ACCESS。即使我将其包含在if(已完成)注释掉的

中的任何或所有行中

我是以错误的方式使用它,任何帮助都非常感激。

由于

2 个答案:

答案 0 :(得分:20)

我对动画有同样的问题。我已经通过从其他链接器标志中删除-weak_library /usr/lib/libSystem.B.dylib来解决它。

此外,根据this answer,如果您需要此标记,则可以将其替换为-weak-lSystem

答案 1 :(得分:0)

检查是否不从UIView块内部调用UIView(collectionView,Mapview等),这意味着它将是在主线程之外进行的调用。如果是这样,请尝试以下操作:

DispatchQueue.main.async {
self.mapBoxView.setZoomLevel(self.FLYOVERZOOMLEVEL, animated: true
)}