我以为我做了一些聪明的事情,但它并不完全奏效。计划是有一个自定义的 AlertViewDelegate 对象,该对象通过一个块实现 clickedButton 方法。
#import <Foundation/Foundation.h>
@interface AlertViewDelegate : NSObject <UIAlertViewDelegate>
@property (nonatomic,copy) void(^completionBlock)(NSInteger clickedIndex, UIAlertView *alertView);
@end
#import "AlertViewDelegate.h"
@implementation AlertViewDelegate
@synthesize completionBlock;
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
completionBlock(buttonIndex,alertView);
}
@end
然后,在另一个班级:
AlertViewDelegate * del = [[AlertViewDelegate alloc] init];
[del setCompletionBlock:^(NSInteger buttonIndex, UIAlertView *alertView) {
NSLog(@"%d",buttonIndex);
}];
UIAlertView *view = [[UIAlertView alloc] initWithTitle:@"asdg" message:@"asdg" delegate:del cancelButtonTitle:nil otherButtonTitles:@"YES",@"NO", nil];
[view show];
单击按钮时出现 EXC_BAD_ACCESS 错误。我的猜测是委托被解除分配是因为我在一个方法中定义了它(即它不是一个属性)——这是一个公平的结论吗?关于如何修复它而不必在我使用的每个类中声明 alertviewdelegate 属性的任何建议,即?