問(wèn)題環(huán)境:Xcode 8.1 + iOS SDK10.1
首先是調(diào)用之前的iOS10權(quán)根問(wèn)題厅须,具體問(wèn)題見(jiàn):
“This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription(NSPhotoLibraryUsageDescription) key with a string value explaining to the user how the app uses this data.”
以上問(wèn)題調(diào)用相機(jī)和調(diào)用相冊(cè)都會(huì)遇到仿畸,分別在Info.plist中添加Dictionary:
NSCameraUsageDescription(相機(jī)),
NSPhotoLibraryUsageDescription(相冊(cè))
第二個(gè)先上代碼,我們調(diào)用相冊(cè)的通用代碼:
UIImagePickerController* _imagePickerController;
_imagePickerController = [[UIImagePickerController alloc] init];
_imagePickerController.delegate = self;
_imagePickerController.allowsEditing = YES;
_imagePickerController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
_imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
_imagePickerController.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:_imagePickerController.sourceType];
_imagePickerController.allowsEditing = YES;
[self presentViewController:_imagePickerController animated:YES completion:nil];
有一個(gè)回調(diào)方法:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(nullable NSDictionary<NSString *,id> *)editingInfo {
}
想說(shuō)的是這個(gè)方法已經(jīng)被廢棄错沽,調(diào)用不會(huì)產(chǎn)生任務(wù)效果簿晓,剛開(kāi)始還糾結(jié)了好久;這里要說(shuō)一下廢棄的問(wèn)題:
- (void) application:(UIApplication *)application didDecodeRestorableStateWithCoder:(NSCoder *)coder NS_AVAILABLE_IOS(6_0);
- @property(nonatomic,getter=isProximitySensingEnabled) BOOL proximitySensingEnabled NS_DEPRECATED_IOS(2_0, 3_0);
這里的NS_AVAILABLE_IOS(6_0) 和 NS_DEPRECATED_IOS(2_0, 3_0) 甥捺,
NS_AVAILABEL_IOS(6_0)表示抢蚀,自IOS6.0開(kāi)始支持該方法镀层,若在IOS6.0之前的版本使用該函數(shù)镰禾,則會(huì)導(dǎo)致 Crash;
NS_DEPRECATED_IOS(2_0,3_0)表示該函數(shù)只能在IOS2.0 和 IOS3.0之間使用唱逢,是已被廢棄的函數(shù)吴侦,但并不是說(shuō)在IOS3.0之后不能使用該函數(shù),是可以使用坞古,但也需要考慮找其他替代方法了备韧;現(xiàn)在看來(lái),舊方法不適宜用痪枫,因?yàn)槟承┛梢蕴O(píng)果已經(jīng)不再用了织堂;(為什么不用保險(xiǎn)的呢?)
另外奶陈,還有 NS_DEPRECATED(10_6,10_9,2_0,7_0)這種寫(xiě)法易阳,為自mac10.6和ios2.0引入,在mac10.9和ios7.0被廢棄
另外吃粒,iOS默認(rèn)不添加回調(diào)的時(shí)候相冊(cè)圖片選取或者相冊(cè)中點(diǎn)取消是返回原先界面的潦俺;
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
[picker dismissViewControllerAnimated:YES completion:^{}];
NSLog(@"選擇完畢-----info:%@",info);
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
[picker dismissViewControllerAnimated:YES completion:^{}];
}
接下來(lái)就是這兩個(gè)回調(diào)了,一個(gè)選取徐勃,一個(gè)取消事示,跳回原來(lái)界面的操作需要添加,因?yàn)槿绻麑?shí)現(xiàn)了這兩個(gè)方法僻肖,就是處理自己的邏輯了肖爵;