Pra*_*y C 102 objective-c uiimagepickercontroller ios presentviewcontroller ios10
我正在使用XCode 8并使用iOS 10.2 Beta进行测试.
我已将Photos,PhotosUI和MobileCoreServices框架添加到项目中.
非常简单的代码:
#import <Photos/Photos.h>
#import <PhotosUI/PhotosUI.h>
#import <MobileCoreServices/MobileCoreServices.h>
@interface ViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate, PHLivePhotoViewDelegate>
@property (strong, nonatomic) IBOutlet UIImageView *imageview;
@end
Run Code Online (Sandbox Code Playgroud)
和实施:
- (IBAction)grab:(UIButton *)sender{
UIImagePickerController *picker = [[UIImagePickerController alloc]init];
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
picker.allowsEditing = NO;
picker.delegate = self;
// make sure we include Live Photos (otherwise we'll only get UIImages)
NSArray *mediaTypes = @[(NSString *)kUTTypeImage, (NSString *)kUTTypeLivePhoto];
picker.mediaTypes = mediaTypes;
// bring up the picker
[self presentViewController:picker animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
一旦我点击按钮,应用程序崩溃时出现非常无用的错误:
[access] <private>
而已.没有其他的.
使用break语句,应用程序似乎在"presentViewController"崩溃.
这是一个全新的应用程序,除了抓取按钮,我在UI中没有任何其他内容.
此外,在iOS 9.3上测试,这很好.我错过了iOS 10中可能会更改的内容吗?
roc*_*ift 172
您可能需要将NSPhotoLibraryUsageDescription放入plist中.喜欢
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) uses photos</string>
Run Code Online (Sandbox Code Playgroud)
在此处查看所有使用说明.
Elo*_*han 132
在iOS10中,在访问隐私敏感数据(如相机,联系人等)之前,您必须要求授权,否则当您访问它们时,您的应用程序将崩溃.然后Xcode会记录如下:
此应用程序已崩溃,因为它试图在没有使用说明的情况下访问隐私敏感数据.应用程序的Info.plist必须包含一个
NSContactsUsageDescription
带有字符串值的键,向用户解释应用程序如何使用此数据.
怎么处理这个?
打开您名为的项目中的文件info.plist
,右键单击它,打开Source Code
,将下面的代码粘贴到它.或者,您可以打开 info.plist
为Property List
默认,单击添加按钮,Xcode中会给你打字时建议完井Privacy -
与键盘的帮助⬆️和⬇️.
记住你为什么问这个授权,之间写你的描述 <string>
和</string>
,或者您的应用程序将被苹果拒绝:
<!-- Photo Library -->
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) photo use</string>
<!-- Camera -->
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) camera use</string>
<!-- Write To Image Gallery>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>$(PRODUCT_NAME) save phots in gallry</string>
<!-- Microphone -->
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) microphone use</string>
<!-- Location -->
<key>NSLocationUsageDescription</key>
<string>$(PRODUCT_NAME) location use</string>
<!-- Location When In Use -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) location use</string>
<!-- Location Always -->
<key>NSLocationAlwaysUsageDescription</key>
<string>$(PRODUCT_NAME) always uses location </string>
<!-- Calendars -->
<key>NSCalendarsUsageDescription</key>
<string>$(PRODUCT_NAME) calendar events</string>
<!-- ? Reminders -->
<key>NSRemindersUsageDescription</key>
<string>$(PRODUCT_NAME) reminder use</string>
<!-- Contacts -->
<key>NSContactsUsageDescription</key>
<string>$(PRODUCT_NAME) contact use</string>
<!-- Motion -->
<key>NSMotionUsageDescription</key>
<string>$(PRODUCT_NAME) motion use</string>
<!-- Health Update -->
<key>NSHealthUpdateUsageDescription</key>
<string>$(PRODUCT_NAME) heath update use</string>
<!-- Health Share -->
<key>NSHealthShareUsageDescription</key>
<string>$(PRODUCT_NAME) heath share use</string>
<!-- ? Bluetooth Peripheral -->
<key>NSBluetoothPeripheralUsageDescription</key>
<string>$(PRODUCT_NAME) Bluetooth Peripheral use</string>
<!-- Media Library -->
<key>NSAppleMusicUsageDescription</key>
<string>$(PRODUCT_NAME) media library use</string>
<!-- Siri -->
<key>NSSiriUsageDescription</key>
<string>$(PRODUCT_NAME) siri use</string>
<!-- HomeKit -->
<key>NSHomeKitUsageDescription</key>
<string>$(PRODUCT_NAME) home kit use</string>
<!-- SpeechRecognition -->
<key>NSSpeechRecognitionUsageDescription</key>
<string>$(PRODUCT_NAME) speech use</string>
<!-- VideoSubscriber -->
<key>NSVideoSubscriberAccountUsageDescription</key>
<string>$(PRODUCT_NAME) tvProvider use</string>
Run Code Online (Sandbox Code Playgroud)
如果它不起作用,请尝试询问后台授权:
<key>UIBackgroundModes</key>
<array>
<!-- something you should use in background -->
<string>location</string>
</array>
Run Code Online (Sandbox Code Playgroud)
或者去target -> Capabilities -> Background Modes -> open the background Modes
:
然后清理你的项目,运行它.
转到此处获取更多信息: iOS10AdaptationTips.
在iOS 10中,Apple已经改变了访问任何用户私有数据类型的方式.
您需要将隐私 - 照片库使用说明密钥添加到您的应用程序Info.plist
及其使用信息中.
有关更多信息,请参阅以下GIF.
或者,如果要添加via,info.plist
则需要添加NSPhotoLibraryUsageDescription键.
只需复制并粘贴到字符串下面即可info.plist
.
<key>NSPhotoLibraryUsageDescription</key>
<string>Take the photo</string>
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅以下GIF.
归档时间: |
|
查看次数: |
59536 次 |
最近记录: |