3

こんにちは、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" を複数回実行すると、メモリ リークと見なされる複数のビュー コントローラがメモリ内でアクティブになります。

これを正しく行っているかどうかはわかりません。プロジェクト ファイルが処理するコードからストーリーボードを起動しません。ただし、クイック アクション ハンドラはプログラムで実行する必要があります。

クイックアクションでストーリーボードを起動する最良の方法は何ですか? 誰でも良い解決策を提供できますか?ありがとう!

4

0 に答える 0