2016-05-03 11 views
0

Ich habe eine Seite im Storyboard, wo ein Benutzer ihren Spitznamen und Benutzer Icon ändern kann. Die Benutzer, Benutzername ist vordefiniert und ich benutze dies zusammen mit NSUserDefaults, um minimale Informationen über diesen Benutzer zu speichern;Swift Referenzierung UIImage von Benutzern Fotos in einem Dict gesammelt

UserData['UserID'] = ["Nickname":"Johnny English", "UsersProfile": "abc123"] 

ich eine Seite laden, wo der Benutzer ihren Nicknamen und Profilbild ändern kann, mit UIImagePickerController Ich kann ein Bild in der Benutzer-Bibliothek finden, und dann das auf der Seite Stock Bild mit dem neuen Profil ersetzen .

Aber ich kann nicht finden, eine Möglichkeit zu finden, entweder das Bild innerhalb der iOS-Verzeichnisse zu verweisen oder das Bild in die App zu verschieben und es auf diese Weise zu referenzieren.

Bisher habe ich:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { 
     UserIconImageView.contentMode = .ScaleAspectFit 
     UserIconImageView.image = pickedImage 
     // Add the UsersProfile to the UsersProfile entry for this User 
     //detailsOfUser["CustomImage"] = pickedImage 
     // Change the 'Done' button to a 'Save' 
     self.completeButton.title = "Save" 
    } 
    dismissViewControllerAnimated(true, completion: nil) 
} 

Was ist der beste Weg, hier gehe ich vor? Ist es besser, das Bild zu referenzieren oder es in die App zu verschieben? Wenn das so ist, wie?

detailsOfUser["CustomImage"] = does a url/referencing string go here? 

Antwort

0

Kürzlich habe ich mit ähnlichen Problem gearbeitet. Alle anwsers, die ich gefunden habe, sagten, dass es keine Möglichkeit gibt, den Verweis auf dieses Bild von UIImagePickerController ausgewählt und meine Lösung war dies:

Zuerst habe ich den lokalen Ordner Ordnerpfad für ausgewählte Bild gefunden :

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    let docsFileHandler: FileManager = FileManager.init() 
    let documentDirectoryPath: String = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first! 

Dann habe ich ein ausgewähltes Bild aufgenommen und seinen Namen mit der Endung:

 let imageFromPicker = info[UIImagePickerControllerOriginalImage]! 
     var imageID = (info[UIImagePickerControllerReferenceURL] as! NSURL).absoluteString as NSString 
     let imageExt = (info[UIImagePickerControllerReferenceURL] as! NSURL).lastPathComponent! as NSString 

Nächster Schritt habe ich die Bildnamen von Vermögenswerten Bibliothek gefunden. Ich habe den Teil mit ID und Extension verwendet, aber Sie können ihn beispielsweise als Benutzernamen speichern. Ich habe den neuen Namen für das Bild zum Pfad des Dokumentordners hinzugefügt.

 let startRangeName = imageID.rangeOfString("id=") 
     let endRangeName = imageID.rangeOfString("&") 

     let idRange = NSMakeRange(startRangeName.location + startRangeName.length, endRangeName.location - startRangeName.location - endRangeName.length - startRangeName.length) 

     imageID = imageID.substringWithRange(idRange) 

     var writePathForFile = (documentDirectoryPath as NSString).stringByAppendingPathComponent(imageID as String) 
     writePathForFile.appendContentsOf(imageExt as String) 

Der letzte Schritt war das ausgewählte Bild zu speichern, um die Dokumente mit erstellten Namen Ordner:

 let imageDataFromPicker = UIImagePNGRepresentation(imageFromPicker as! UIImage) 

     imageDataFromPicker?.writeToFile(writePathForFile, atomically: true) 

In diesem Punkt können Sie writePathForFile für Ihre detailsOfUser verwenden [ "CustomImage"]

+1

Arbeitete wie ein Charme! Eine Sache zu erwähnen. FileManager-Zeile muss sein: 'docsFileHandler: NSFileManager = NSFileManager.init()' –