因此,StackOverflow上的另一個EXC_BAD_ACCESS主題,但由於我是Objective-C的新手,這仍然是我還沒有真正掌握的主題。儘管我已經做了大量的研究。如何擺脫EXC_BAD_ACCESS
問題如下。我有一個UIScrollView
,我用自定義類覆蓋(名爲MultiSelectView)。如果用戶點擊此UIScrollView
,然後我想打開一個允許他選擇一些數據的視圖。
所以我宣佈了一個UITapGestureRecognizer
,它調用openMultiSelect:
方法。但在線[parent.navigationController pushViewController:view animated:YES];
我得到一個Program received signal: "EXC_BAD_ACCESS".
錯誤。爲什麼?爲什麼?
- (id) initWithCoder:(NSCoder *) coder {
self = [super initWithCoder: coder];
if (self) {
// Add a Tap Gesture Recognizer to the Scrollview.
// If the user taps the view, it triggers the 'openMultiSelect' method.
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openMultiSelect:)];
[singleTap setNumberOfTapsRequired:1];
[singleTap setNumberOfTouchesRequired:1];
[self addGestureRecognizer:singleTap];
}
return self;
}
- (void)openMultiSelect:(UIGestureRecognizer *)gesture {
//int myViewTag = gesture.view.tag; // now you know which view called
DataSelectView *view = [[DataSelectView alloc] initWithNibName:@"DataSelectView" bundle:[NSBundle mainBundle]];
view.allowMultiSelect = YES;
[parent.navigationController pushViewController:view animated:YES];
[view release];
}
因此,您看到的parent
是包含該選項卡的ViewController。有一個更好的方法嗎?因爲現在我有一個包含Tabs的ViewController。在我的activateTab:
方法中,我創建了選項卡並沿着self
傳遞。我做的viewDidLoad
同該標籤的parent
傳遞到定製UIScrollView
:
- (void) activateTab:(int)index {
... code ...
self.tab_Basic = [[TabBasic alloc] initWithNibName:@"TabBasic" bundle: [NSBundle mainBundle]];
self.tab_Basic.parent = self;
... code ...
}
我發現啓用NSZombieEnabled真的幫助我調試。 Obj-C可能會讓人感到困惑:/ – Pepe