こんにちは、plist に 2 つの 3D クイック アクション ショートカット アイテムがあります。次のように、ハンドラー コードを App デリゲートに配置しました。
-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler{
UIStoryboard *storyboard = self.window.rootViewController.storyboard;
if (storyboard==nil){
storyboard=[UIStoryboard storyboardWithName:@"Storyboard" bundle:[NSBundle mainBundle]];
}
ViewController *vc = [storyboard instantiateInitialViewController];
self.window.rootViewController = vc;
if([shortcutItem.type isEqualToString:@"firstItem"]){
[vc performSegueWithIdentifier:@"firstSegue" sender:self];
}else{
[vc handleSecondQuickAction];
}
}
基本的に、アプリの最初の起動と、アプリが既にバックグラウンドにあり、ホーム画面から起動するという 2 つのシナリオがあります。
アプリが既に起動されているときにストーリーボードを再度作成しないように、ストーリーボードが有効かどうかを確認する次のコードを追加します。
UIStoryboard *storyboard = self.window.rootViewController.storyboard;
if (storyboard==nil){
storyboard=[UIStoryboard storyboardWithName:@"Storyboard" bundle:[NSBundle mainBundle]];
}
私の問題はここにあります:
if([shortcutItem.type isEqualToString:@"firstItem"]){
[vc performSegueWithIdentifier:@"firstSegue" sender:self];
}
(ホーム画面に戻ってクイック アクションで再起動することにより) quickAction "firstItem" を複数回実行すると、メモリ リークと見なされる複数のビュー コントローラがメモリ内でアクティブになります。
これを正しく行っているかどうかはわかりません。プロジェクト ファイルが処理するコードからストーリーボードを起動しません。ただし、クイック アクション ハンドラはプログラムで実行する必要があります。
クイックアクションでストーリーボードを起動する最良の方法は何ですか? 誰でも良い解決策を提供できますか?ありがとう!