[英]EXC_BAD_ACCESS on selector in objective C
我有一个UIBarButtonItem类别,我用自定义UIButton构建UIBarButtonItems,因为我发现UIButtons更容易自定义,然后是UIBarButtonItems。
现在,我想继续使用BarButtonItem的目标和操作属性,而不是使用按钮中的那些属性,以便BarButtonItem可以继续在外部进行自定义,而无需任何人知道实现细节(即,它正在使用按钮)内部)。
现在,为了做到这一点,我在我的类别中写了这段代码:
+ (UIBarButtonItem *)backBarButtonItemWithColor:(UIColor *)color
{
UIImage *closeIcon = [MyImageUtility navBarBackArrow];
if (color) closeIcon = [closeIcon imageWithColorOverlay:color];
UIButton *close = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, closeIcon.size.width+10.0f, closeIcon.size.height+10.0f)];
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:close];
[close setImage:closeIcon forState:UIControlStateNormal];
[close addTarget:item action:@selector(SD_executeBarButtonItemAction) forControlEvents:UIControlEventTouchUpInside];
return item;
}
- (void)SD_executeBarButtonItemAction
{
[self.target performSelector:self.action];
}
每当调用SD_executeBarButtonItemAction时,我在选择器上得到一个exc_bad_access,虽然我不知道为什么。 有任何想法吗? 有没有解决的办法?
谢谢!
编辑:
这是崩溃的选择器调用的代码:
void (^transition)(void) = ^(void) {
[self.rightContainer setFrame:[self offscreenContainerFrame]];
[self.centerContainer setAlpha:1.0f]; //TODO: this is unreliable in iOS6 -- we should add a view to the top of it to darken
[self.centerContainer setTransform:CGAffineTransformIdentity];
};
[self notifyWillShowPrimaryViewController];
[self performBlock:transition animated:YES completion:^(BOOL finished) {
[self notifyDidShowPrimaryViewController];
[self setForegroundController:self.primaryNavigationController];
if (block != NULL) block(finished);
}];
您的代码是递归调用。
- (void)SD_executeBarButtonItemAction
{
[self.target performSelector:self.action];
}
你设置如下:
[close addTarget:item action:@selector(SD_executeBarButtonItemAction) forControlEvents:UIControlEventTouchUpInside];
其中item
是UIBarButtonItem
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.