Próbuję wyświetlić obraz z biblioteki zdjęć w UIImageView
Pełny błąd to:
2017-06-09 21: 55: 59.063307 + 0200 firstapp2.0 [12873: 1120778] Błąd wykrywania PhotoPicker: Error Domain = PlugInKit Code = 13 „zapytanie anulowane” UserInfo = {NSLocalizedDescription = zapytanie anulowane}
Mój kod znajduje się poniżej:
import UIKit
class ViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate{
@IBOutlet weak var pic: UIImageView!
@IBOutlet weak var text: UILabel!
var chosenImage : UIImage!
override func viewDidLoad() {
super.viewDidLoad()
pic.isUserInteractionEnabled = true;
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [AnyHashable: Any]) {
var chosenImage = info[UIImagePickerControllerEditedImage]
self.pic!.image = chosenImage as! UIImage
picker.dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true, completion: nil)
}
@IBAction func tap(_ sender: Any) {
self.text.text = "Kreason"
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
imagePicker.allowsEditing = false
self.present(imagePicker, animated: true, completion: nil)
}
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
wartości słownika są rzutowane jako id w obj-c. Zaimplementowałem również żądanie autoryzacji i obsługę dostępu do biblioteki zdjęć użytkownika: nadal otrzymuję komunikat o błędzie. Dodałem w pliku info.plist wpis dotyczący prywatności na potrzeby biblioteki zdjęć użytkownika.Odpowiedzi:
Musisz podać wyraźne odniesienie do celu C:
@objc
źródło
dismiss
.extension [your class name]
bloku poza klasą.Znalazłem to rozwiązanie. Otrzymaliśmy ten błąd z tych dwóch powodów, które są wymienione poniżej.
Kod autoryzacji
didFinishPickingMediaWithInfo
Źle:
Dobrze
Mam nadzieję, że to rozwiązanie pomoże Ci rozwiązać ten błąd.
Jeśli to działa, nie zapomnij oznaczyć go jako poprawnego, więc pomoże to innym znaleźć właściwą drogę.
źródło
picker.dismiss(animated: true, completion: nil)
Znalazłem to! Próbuje powiedzieć, że nie masz uprawnień do „zdjęć”. Musisz dołączyć rozszerzenie
#import <Photos/Photos.h>
i zażądać autoryzacji, na przykład taką jak ta w Objective-C.Mam nadzieję, że zaoszczędzi to trochę czasu. Spędziłem dwa pełne dni na debugowaniu tego!
Jestem pewien, że ktoś może ci powiedzieć, jak zrobić to samo w Swift.
źródło
Wypróbowałem kilka kombinacji odpowiedzi bez większego sukcesu.
Korzystając ze Swift 4, stwierdziłem, że muszę upewnić się, że zaimplementowano następujące dwa elementy, aby upewnić się, że obraz został wybrany i umieszczony w selektorze (zwróć uwagę, że podczas wykrywania rozszerzeń wystąpiły błędy „[discovery]”:
komunikat nadal jest wyświetlany w konsoli, ale nie uniemożliwia dodania obrazu). Może to jest wiadomość, która powoduje odrzucenie selektora?
1) Delegat dla
UIImagePickerController
ma(UIImagePickerControllerDelegate & UINavigationControllerDelegate)?
więc potrzeby, aby wyraźnie dodaćUINavigationControllerDelegate
jako jeden z protokołów:2) Upewnij się, że info.plist ma ustawiony
Privacy - Photo library Usage Description
klucz i wartość ciągu.Oczywiście musisz upewnić się, że utworzysz
UIImagePickerController
i ustawisz jego delegata na równeself
wViewDidLoad()
:źródło
Naprawiłem ten problem, wywołaj poniższą funkcję w viewdidload lub viewWillAppear lub viewDidAppear, aby sprawdzić uprawnienia dla Twojej aplikacji.
Aby skorzystać z powyższej metody, nie zapomnij dodać
import Photos
na początku klasy.źródło
XCODE 10.1 / SWIFT 4.2:
Dodaj wymagane uprawnienia (wspomnieliśmy o innych)
Zaimplementuj tę funkcję delegata:
źródło
* Brak DELEGATE * w Swift 3
W moim przypadku wszystkie ustawienia były poprawne:
1 - Delegaci (UIImagePickerControllerDelegate, UINavigationControllerDelegate);
2 - Uprawnienia już zweryfikowane;
3 - Plist już wykonane;
4 - Wszystko, co przeczytałem w tej odpowiedzi, zrobiłem;
Ale zapomniałem zaimplementować
pickerview.delegate = self
naviewDidLoad
Ponieważ KOPIUJĘ i WKLEJĘ z mojego innego kontrolera widoku i zapomnij o tym!Mam nadzieję, że komuś to pomoże, najpierw przejrzyj KOPIUJ / WKLEJ !!!
źródło
To może nie być najbardziej bezpośrednio pomocna odpowiedź - ale miejmy nadzieję, że pomoże! Jestem w 99% pewien, że ten konkretny komunikat o błędzie w rzeczywistości nie wskazuje na prawdziwy problem. Spędziłem godziny wyciągając włosy z tego samego problemu.
1) Miałem zezwolenie na drukowanie zdjęć na konsoli, kiedy uruchamiałem mój selektor, 2) mogłem nawigować i wybierać zdjęcie dość łatwo, oraz 3) kiedy wracałem do widoku po zamknięciu selektora, mój obraz przycisku nie został zaktualizowany o nowe zdjęcie ... a jedyną wskazówką, jaką miałem co do problemu, był dokładnie ten sam komunikat o błędzie, który otrzymujesz.
Okazuje się, że na stałe zakodowałem obraz zastępczy w ViewWillAppear zamiast ViewDidLoad. Za każdym razem, gdy selektor się zamykał, wywoływał ViewWillAppear i zastępował mój wybrany obraz moim na stałe zakodowanym obrazem. Naprawiłem ten problem i rzeczywiście - teraz wszystko działa dobrze ... i nadal widzę ten komunikat o błędzie za każdym razem, gdy wracam z selektora.
Zalecam szukanie problemu w innym miejscu niż ImagePicker i prawdopodobnie go znajdziesz.
źródło
Jeśli tego nie zrobiłeś, spróbuj tego .
To rozwiązuje mój problem.
źródło
NSLog
.To rozwiązuje problem w Swift 4:
Zmień poniższy kod
do tego:
źródło
Otrzymałem tę samą wiadomość, gdy próbowałem przedstawić inny kontroler z wywołania zwrotnego selektora
imagePickerController
. Rozwiązaniem, które zadziałało dla mnie, było przeniesienie mojego kodu wewnątrz wywołania zwrotnego zakończenia z metody odrzucania selektoraźródło
Upewnij się, że tworzysz podklasy obu:
UIImagePickerControllerDelegate, UINavigationControllerDelegate
.Pamiętaj też, aby ustawić delegata:
Kredyty dla tego źródła .
źródło
Znalezienie rozwiązania tego problemu zajęło mi wieczność. Wygląda na to, że problem polega na tym, że nie można znaleźć funkcji imagePickerController elementu UIImagePickerControllerDelegate. Jeśli poprawnie ustawiłeś delegata i przestał działać po uaktualnieniu do Swift 4, problem polega prawdopodobnie na tym, że nie udostępniłeś go Objective-C za pomocą @objc, który jest wymagany od wersji Swift 4.
To musi być:
zamiast
źródło
Objective-C method 'imagePickerController:didFinishPickingMediaWithInfo:' provided by method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' conflicts with optional requirement method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' in protocol 'UIImagePickerControllerDelegate'
extension
bloku?Naprawiono to, ustawiając 1 sekundowe opóźnienie podczas ustawiania obrazu.
źródło
Pamiętaj, aby dodać
internal func
na początku, a następnie dodać małą literę po nawiasie (_ picker: UIImagePickerController…
a następnie zmienić zAnyObject
naAny
]…Sprawdź kod poniżej:
źródło
Zaskoczyło mnie to, ale odpowiedź pod linkiem poniżej zadziałała. Błąd zniknął i obraz wyświetla się zgodnie z oczekiwaniami
Podobnie jak w przypadku jednej z powyższych odpowiedzi, musisz mieć,
(_ picker...
ale także@objc
przed funkcją.https://forums.developer.apple.com/thread/82105
źródło
To rozwiązało mój błąd:
źródło
Sprawdź, wykonując następujące czynności:
Ma dostęp do albumu:
Przedstaw UIImagePickerController
Kluczowy krok, upewnij się, że metoda delegata jest jak ścisłe przestrzeganie
źródło
To właśnie zrobiłem i to rozwiązało mój problem.
Mam nadzieję że to pomoże!
źródło
internal
to ustawienie domyślne; Zastanawiam się, jaką różnicę robi to sprecyzowanie ...W moim przypadku otrzymałem ten błąd, ponieważ prezentowałem kontroler selektora obrazów bez uprzedniej weryfikacji, czy użytkownik zezwolił na dostęp do obrazów. W innym miejscu mojego kodu użytkownik udzielił pozwolenia, więc myślę, że wszystko, co musiałem zrobić, to zaimportować zdjęcia. Jednak ponieważ `` mogli '' nie udzielić pozwolenia w tym momencie w aplikacji, dodanie tego tuż przed przedstawieniem kontrolera selektora obrazów rozwiązało problem (również importuj zdjęcia).
Jeśli ta odpowiedź wydaje się zbędna, przepraszam, ale musiałem poskładać kilka różnych odpowiedzi, aby moje rozwiązanie działało. Być może pomoże to komuś innemu w korzystaniu ze Swift 4.
źródło
użyj tego kodu
źródło
Ten błąd „Error Domain = PlugInKit Code = 13” wprawił wiele osób w zakłopotanie, chociaż wydaje się, że jest to nieszkodliwa wiadomość debugowania Apple. Miałem problem z uzyskaniem obrazu, który wybrałem do ustawienia w moim interfejsie użytkownika i pomyślałem, że ten błąd był problemem, ale było to coś bardziej subtelnego.
Mam kontroler selektora obrazu w pliku oddzielnym od kontrolera widoku, który go prezentuje.
MyViewController.swift
ImagePicker.swift
Większość samouczków i odpowiedzi ma ukończenie ustawione na zero. Jeśli jednak ustawisz uzupełnianie na nil i osobno wywołasz metodę didSelect delegata, metoda zostanie wywołana, ale obraz nie zostanie ustawiony, więc upewnij się, że używasz uzupełniania odrzucenia.
I znowu, wiem, że ta odpowiedź może nie być bezpośrednio związana z pierwotnym pytaniem, ale mam wrażenie, że wiele osób przychodzi tutaj w związku z tym problemem i podane rozwiązania nie pomagają. Powodem jest to, że większość osób udzielających odpowiedzi ma kontroler selektora obrazu w tej samej klasie co kontroler głównego widoku, a zatem nie musi używać uzupełnienia.
źródło
Błąd występuje również, gdy nie skonfigurowałeś uprawnień do korzystania z biblioteki zdjęć w swoim
Info.plist
pliku.Trzeba dodać
Privacy - Photo Library Usage Description
wInfo.plist
z String , który pojawi się, gdy App próbuje po raz pierwszy, aby uzyskać dostęp do biblioteki fotografii Użytkownika.Ostateczne
Info.plist
poprawki powinny wyglądać mniej więcej tak:źródło
Mam ten sam błąd i naprawiłem go w ten sposób:
get image w inny sposób zależy od UIImagePickerController allowEditing jest true lub false
I oczywiście najpierw poproś o pozwolenie na dostęp do biblioteki zdjęć, jak w powyższych komentarzach.
źródło
Z mojej strony
UINavigationControllerDelegate
brakuje delegata.class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate
źródło
Natknąłem się na ten sam problem. Żadna z wyżej wymienionych sugestii nie zadziałała dla mnie. Jednak rozwiązałem to, jawnie dzwoniąc do selektora. Odrzuć i odrzuć opublikowanie tego. Nie rozumiem, dlaczego wykonałem takie wezwania, ale to zadziałało.
źródło
Przeczytałem wszystkie te odpowiedzi i trochę zmodyfikowałem tutaj i nie trzeba było ich odrzucać, to zadziałało dla mnie, dziękuję innym, którzy odpowiedzieli tutaj.
źródło
znalazłem rozwiązanie IMage PickerView .....
źródło
kliknij imageView, aby załadować obraz z biblioteki zdjęć i wyświetlić podgląd w tym samym widoku obrazu. na szybkie 4
źródło
Miał ten sam problem w Swift 4.2 i Xcode 10.0 . Chociaż selektor obrazów działał poprawnie, Xcode pokazał ten błąd na konsoli. Aby się tego pozbyć:
źródło