StackOverflowに関するもう1つのEXC_BAD_ACCESSトピックですが、Objective-Cを初めて使ったので、これはまだまだ私がまだ理解していないトピックです。私はすでにそれについて多くの研究を行っていますが。EXC_BAD_ACCESSを取り除く方法
問題は次のとおりです。私はカスタムクラス(MultiSelectView)を使って上書きしたUIScrollView
を持っています。ユーザーがこの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です。これを行うより良い方法はありますか?今のところ私はTabを含むViewControllerを持っているからです。そのactivateTab:
メソッドでは、このようにしてタブを作成し、self
を渡します。 IカスタムUIScrollView
にparent
を渡すために、そのタブのviewDidLoad
で同じ操作を行います。ビューがあるまで、早すぎるオブジェクト「ビュー」をリリースされ何が間違ってやっている
- (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