2015-09-29 14 views
7

次の2つのオプションのアクションシートを表示する機能があります。現在、実装されている唯一のオプションは「写真」というタイトルです。アクションシートが正しく提示され、適切なアクションが呼び出されます。私の問題は、シミュレータと実際のデバイスでは、フォトライブラリへのアクセスを要求するプロンプトを表示できないということです。PHPhotoLibrary.requestAuthorization()がiOS 9で承認プロンプトを表示しない

PHPhotoLibrary.authorizationStatus()戻り.Deniedや写真へのアクセス権がありません現在のアプリを知らせるモーダル提示:私はすでに、「掃除」しました enter image description here

@IBAction func attachPhotoButtonTapped(sender: AnyObject) { 
    let actionSheetController = UIAlertController(title: "Images", message: "Select image source...", preferredStyle: .ActionSheet) 
    let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { 
     (action) in 
     // ... 
    } 
    actionSheetController.addAction(cancelAction) 

    let takePictureAction = UIAlertAction(title: "Camera", style: .Default) { 
     (action) in 
     // ... 
    } 
    actionSheetController.addAction(takePictureAction) 

    let choosePictureAction = UIAlertAction(title: "Photos", style: .Default) { 
     (action) in 
     PHPhotoLibrary.requestAuthorization({(status:PHAuthorizationStatus) in 
      switch status{ 
       case .Authorized: 
        dispatch_async(dispatch_get_main_queue(), { 
         print("Authorized") 
        }) 
        break 
       case .Denied: 
        dispatch_async(dispatch_get_main_queue(), { 
         print("Denied") 
        }) 
        break 
       default: 
        dispatch_async(dispatch_get_main_queue(), { 
         print("Default") 
        }) 
        break 
      } 
     }) 
    } 
    actionSheetController.addAction(choosePictureAction) 

    presentViewController(actionSheetController, animated: true, completion: nil) 
} 

プロジェクトを、シミュレータの設定をリセットし、まだありませんプロンプトを表示させる。

+0

の可能性のある重複した[APPは、あなたの写真や動画のiOSへのアクセス権を持っていない9](http://stackoverflow.com/questions/32768012/app-does-not-have-access-to-あなたの写真またはビデオ - ios-9) – bummi

答えて

7

Info.plistファイルのCFBundleDisplayNameキーに空の値があり、フォトライブラリにアクセスするためのアクセス許可を求める警告メッセージが作成できないためです。 、次の行を追加するプロジェクトを清掃し、建物が再び問題が修正されています。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>CFBundleDisplayName</key> 
    <string>$(PRODUCT_NAME)</string> 
    <!-- More keys and values --> 
</dict> 
</plist> 

感謝をVladimir Gorbenkoに私はこの問題を解決する手助けのために。

+0

命綱 - 自分自身でこれを決して解明したことはありません – Tys

+0

iOS 10.1シミュレータでは機能しません。 ここに問題が掲載されました。 http://stackoverflow.com/questions/40386819/ios-request-permission-does-not-show/40386997#40386997 –

1

Info.plistに移動し、バンドル表示名を追加します。コードを追加します。

enter image description here

関連する問題