我有以下功能,显示一个带有两个不同选项的操作表.目前,唯一实施的选项是标题为“照片”.正确显示操作表并调用正确的操作.我的问题是,在模拟器和实际设备上,我无法显示请求访问照片库的提示.
PHPhotoLibrary.authorizationStatus()返回.Denied并显示通知当前应用程序无法访问照片的模式:
@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) }
解决方法
发生这种情况是因为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帮助我解决这个问题.