アプリ用のカスタム Segue があります。アプリの左側にはタブ バーがあり、その上に 5 つのボタンがあります。メイン ビュー TDViewController には、UIViewController (UIViewController * currentViewController) と UIView (View * placeholder) があります。カスタム セグエに以下のコードを使用します。
@implementation TDCustomTabBarSegue
- (void) perform {
TDViewController *vc = (TDViewController *)self.sourceViewController;
UIViewController *dstVC = (UIViewController *) self.destinationViewController;
for(UIView *view in vc.placeholder.subviews){
[view removeFromSuperview];
}
vc.currentViewController = dstVC;
[vc.placeholder addSubview:dstVC.view];
}
現在のプレースホルダー ビューでボタンをクリックしようとするまでは、すべて問題ありません。[MyViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x7562e70 というエラーが表示されます
View Controller が保持されていないと思いますが、問題を解決する方法がわかりません。
編集 -- 追加情報
TDTViewController.m
...
- (IBAction)modeButtonClicked:(id)sender; //hooked up to storyboard
TDTViewController.m
...
- (IBAction)modeButtonClicked:(id)sender {
//hooked up to storyboard
}
この問題は、私の UIButton に限定されたものではありません。プレースホルダー ビューで任意のコントロールを操作すると、同じ割り当て解除されたインスタンス エラーでアプリがクラッシュします。
プロファイラーは、TDTViewController でゾンビを表示します。イベント タイプ = Malloc、RefCt = 1、責任ある発信者 = -[UIClassSwapper initWithCoder:]