これは非常に単純な質問ですが、View Controller を保持する必要があり、現在の解決策は解決策ではありません。
前面にプッシュする新しいビュー コントローラーを選択できるスライド アウト テーブル ビュー メニューがあります。ビューを選択すると、古いメイン ビュー コントローラーの割り当てが解除され、新しいビュー コントローラーがプッシュされます。私の機能の 90% は 1 つのビュー コントローラーを中心に展開するため、それをメモリに保持したいので、常にリソースを割り当ててコア データから最後のデータ ソースをプルしたり、ネットワーク リクエストを行ったりする必要がありません。
temporaryMainViewController
別の VC が割り当てられる前に、単純にプレースホルダーを設定して中央のビュー コントローラーに割り当てようとしましたが、現在のメイン ビュー コントローラーを にtemporaryMainViewController
割り当てると、メイン ビュー コントローラーのアドレスが割り当てられるだけです。 . ビュー コントローラにアクセスしようとするcopy
と、クラッシュが発生します。
self.temporaryMainViewController = self.currentCenterViewController;
では、アドレスの値ではなくオブジェクトの値によって一時コントローラーが割り当てられている場所を効果的に行うにはどうすればよいでしょうか。
-- 編集 -- 詳細情報:
ECSlidingViewControllerは、(私の場合) 3 つのコントローラーをメモリに保持します。上部/中央/メイン ビュー コントローラー、左側の隠しコントローラー、右側の隠しコントローラーです。左の隠しコントローラーは tableview です。LeftMenuTableViewController
各行が選択されると、その indexPath に関連付けたビュー コントローラー クラスを観察し、そのクラスのインスタンスをインスタンス化し、単純な割り当てステートメントで topViewController に設定します。新しいView Controllerがトップビューに割り当てられたときに、(クラス(保持する)の)最初のトップView Controllerのみをメモリに保持したい。PlacesNavigationViewController
PlacesTableViewController
私の最初のアプローチは、プレースホルダー プロパティを で宣言するLeftMenuTableViewController
ことでした。これは、メモリ自体を離れることがないためです。
@property (nonatomic, strong) UIViewController* temporaryViewController;
次にdidSelectRowAtIndexPath
:
// make local variables for storyboard and the identifier of the view controller that will be pushed, then..
self.temporaryViewController = self.topViewController;
self.topViewController = [storyboard instantiateViewControllerWithIdentifier:newViewControllerIdentifier];
しかし、一時的なコントローラには topViewController のメモリ アドレスが割り当てられているため、これは失敗します。次の行では、保持する新しいビュー コントローラが指定されています。
だから私が必要としているのは、内容を保持して、変更topViewController
されたときtopViewController
に古い VC をメモリに保持する方法です。
Objective-C の明らかな原則を忘れている可能性がありますが、これはかなりの問題を引き起こしています。私が何かを明確にしていない場合はお知らせください。