Вы проверили ваши настройки конфиденциальности в настройках Apple> Конфиденциальность> Фотографии? iOS следует запросить разрешение на первое использование. Если пользователь отказывается, все, что вы можете сделать, это указать пользователю перейти к настройкам и разрешить доступ. Я предполагаю, что эта настройка выключена для вас.
Вы можете проверить статус авторизации в приложении. Я программирую в Objective C, и я использую только класс iOS 8+ PHPhotoLibrary, но, возможно, приведенный ниже код даст вам некоторые идеи. (Там какой-то "ShowMessage" псевдо-код также.)
- (void) loadView {
[self continueWithStatus: [PHPhotoLibrary authorizationStatus]];
}
- (void) continueWithStatus: (PHAuthorizationStatus) status {
if (status == PHAuthorizationStatusRestricted) ShowMessage "Access to photo library is restricted.";
else if (status == PHAuthorizationStatusDenied) ShowMessage "You need to enable access to photos. Apple Settings > Privacy > Photos.";
else if (status == PHAuthorizationStatusNotDetermined) {
[PHPhotoLibrary requestAuthorization: ^(PHAuthorizationStatus status) {
dispatch_async (dispatch_get_main_queue(), ^{ // continue work on main thread
[self continueWithStatus: [PHPhotoLibrary authorizationStatus]];
});
}];
}
else [self startAssetRetrieve];
}
Спасибо за ваше руководство. Я использовал выше логику и создан после быстрого кода:
@IBAction func selectImageFromPhotoLibrary(sender:
UITapGestureRecognizer) {
authHandler(PHPhotoLibrary.authorizationStatus())
}
func authHandler(status: PHAuthorizationStatus) {
switch status {
case .Authorized:
startAssetRevrival()
case .Denied:
print("denied")
case .NotDetermined:
print("not determined")
PHPhotoLibrary.requestAuthorization(f)
case .Restricted:
print("restricted")
}
}
func f(status: PHAuthorizationStatus){
dispatch_async(dispatch_get_main_queue()) {
self.authHandler(status)
}
}
func startAssetRevrival() {
let imagePickerController = UIImagePickerController()
// Only allow photos to be picked, not taken.
imagePickerController.sourceType =
UIImagePickerControllerSourceType.PhotoLibrary
// Make sure ViewController is notified when the user picks an
image.
imagePickerController.delegate = self
presentViewController(imagePickerController, animated: true,
completion: nil)
}
Теперь я вижу, что статус начинается с не определен, а затем запрещен. В настройке конфиденциальности я не вижу названия моего приложения.
Я закончил тем, что воссоздал проект в Xcode. Изображения подбираются, как ожидалось. – user1848653