許可ダイアログを出すタイミング

背景

ImagePickerを自作した。
viewDidLoadに写真アルバムへのアクセス許可を得るプロセスを記述し、
許可を得られなかった時にはUIAlertControllerを表示しようとしたが、表示されなかった。

原因

presentViewControllerはviewDidLoadで呼んではいけないから、っぽい。(あってるかな)

解決策

-(void) viewDidAppear:(BOOL)animated{
// ※ viewWillAppearでも大丈夫
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"エラー"
                                                                   message:@"許可してほしいな"
                                                            preferredStyle:UIAlertControllerStyleAlert];
    [alert addAction:[UIAlertAction actionWithTitle:@"OK"
                                              style:UIAlertActionStyleDefault handler:nil]];

    // アルバムへのアクセス許可を確認
    switch ([PHPhotoLibrary authorizationStatus]) {
        case PHAuthorizationStatusNotDetermined: {
            // まだ許可されていない場合
            [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status){
                switch (status) {
                    case PHAuthorizationStatusRestricted:
                    case PHAuthorizationStatusDenied:
                        // 許可を得られなかった場合アラート
                        [self presentViewController:alert animated:YES completion:nil];
                        break;

                    default:
                        break;
                }
            }];
            break;
        }

        case PHAuthorizationStatusRestricted:
        case PHAuthorizationStatusDenied:
            // 拒否されている場合アラート
            [self presentViewController:alert animated:YES completion:nil];
            break;

        default:
            break;
    }
}

同じようなことを二回書いてしまっているけど、[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status){}];がハンドラで返ってきてしまうため、こうするしか思いつかなかった。
いいやり方ご存知の方は教えてください。

こういう常識的なことって、どこで学べばいいんだ…?