程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> xcode-iphone關於delegates崩潰

xcode-iphone關於delegates崩潰

編輯:編程綜合問答
iphone關於delegates崩潰

給一個可拖拽的對象寫了類。

在快完成的時候想要用delegates使用block,運行正常,不知道能不能在使用@protocol時有類似 @optional設置?如果不調用myObject.didEndPanning,應用就會崩潰。

// MyClass.h

#import <Foundation/Foundation.h>

typedef void (^DelegateBlock)(void);

@interface AHDraggableObject : UIView

- (id)initDragableView:(UIView *)view inView:(UIView *)parentView withBorderOffset:(int)offset;

@property (nonatomic, strong) UIView *holder;
@property (nonatomic, weak) DelegateBlock didEndPanning;

@end

// MyClass.m

- (void)handlePanning:(UIPanGestureRecognizer *)sender
{
    CGPoint translation = [sender translationInView:_parentView];
    sender.view.center = CGPointMake(sender.view.center.x + translation.x, sender.view.center.y + translation.y);
    [sender setTranslation:CGPointMake(0, 0) inView:_parentView];

    [self checkBondaries:sender withOffset:_offset inView:_parentView];

    //  end of pan - invoke event
    if (sender.state == UIGestureRecognizerStateEnded)
    {
        _didEndPanning();
    }
}

調用

//ViewController.m
-(void)viewDidLoad {
    _drag = [[MRShape alloc] initDragableView:_testImageView inView:self.view withBorderOffset:40];
    _drag.didEndPanning = ^
    {
     // if didEndPanning call is missing, app crash !
    };
}

最佳回答:


檢測block是否設置:

if (sender.state == UIGestureRecognizerStateEnded && _didEndPanning)
{
    _didEndPanning();
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved