2017-02-02 6 views
1

Ich erstelle eine tableView, die die Bilder aus der Galerie vom Benutzer ausgewählt enthält, dann nehme ich die ausgewählte imagePath, um es auf eine UIImageView platzieren.UIImage imageWithContentsOfFile: funktioniert nicht auf Real-Gerät

NSString *imgPath = @"/var/mobile/Media/DCIM/105APPLE/IMG_5903.JPG";//Hardcoded path just for test, image actually exists on iOS device 

self.imgViewContainer.image = [UIImage imageWithContentsOfFile: imgPath]; 

Dieser Code, der auf Simulator funktioniert:

Um eine iOS Galeriebild in einem UIImageView, Ich verwende gesetzt.

Ich habe auf einem echten Gerät getestet und habe festgestellt, dass die UIImageView leer ist, nachdem der obige Code ausgeführt wurde.

Gibt es eine Möglichkeit, dies mit einem echten Gerät zu erreichen?

+0

Warum erwarten Sie, dass dieser Pfad auf einem echten iOS-Gerät gültig ist? Warum beginnt es mit '@'? – rmaddy

+0

Entschuldigung! Es war das @ der Zeichenkette, Frage bearbeitet ... Ich benutze diesen Pfad nur für einen Test, das Bild existiert – CGR

+2

1. Ist dieser Pfad tatsächlich auf dem echten iOS Gerät vorhanden? 2. Apps sind Sandboxes und können keine Dateien außerhalb ihrer eigenen Sandbox auf einem echten Gerät lesen. – rmaddy

Antwort

3

Aufgrund von App-Sandboxing ist Ihre App nicht berechtigt, den Inhalt von /var/mobile/Media (oder wirklich jedes Unterverzeichnis von /var/) anzuzeigen. Betrachten Sie den Code unten:

do { 
    let fileList = try FileManager.default.contentsOfDirectory(atPath: "/var/mobile/Media/DCIM/") 
} catch { 
    print(error) 
} 

contentsOfDirectory(atPath:) mit einem Fehler mit diesen Details werfen:

Error Domain=NSCocoaErrorDomain Code=257 "The file “DCIM” couldn’t be opened because you don’t have permission to view it." UserInfo={NSFilePath=/var/mobile/Media/DCIM/, NSUserStringVariant=(
    Folder 
), NSUnderlyingError=0x170045700 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}} 

Dieses Beispiel ist in Swift, aber das Äquivalent Objective-C-Code würde den gleichen Fehler haben .

Es gibt keine Möglichkeit, dies zu umgehen (es sei denn, Sie verwenden ein Jailbroken-Gerät, auf dem Ihre Anwendung als root-Benutzer ausgeführt wird). Verwenden Sie UIImagePickerController, um den Benutzer nach einem Bild zu fragen.

Verwandte Themen