背景
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){}];
がハンドラで返ってきてしまうため、こうするしか思いつかなかった。
いいやり方ご存知の方は教えてください。
こういう常識的なことって、どこで学べばいいんだ…?
コメント