使用animateWithDuration完成导致exc_bad_access

cra*_*igk 21 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;
     }
 }];
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

谢谢

iva*_*oid 20

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

此外,根据这个答案,如果你需要这个标志,你可以用它替换它-weak-lSystem.