簡體   English   中英

目標C中選擇器上的EXC_BAD_ACCESS

[英]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];

其中itemUIBarButtonItem

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM