Enregistrer des images dans NSUserDefaults?
Est-il possible d'enregistrer des images en NSUserDefaults
comme un objet, et ensuite récupérer pour continuer à les utiliser?
Vous devez vous connecter pour publier un commentaire.
Est-il possible d'enregistrer des images en NSUserDefaults
comme un objet, et ensuite récupérer pour continuer à les utiliser?
Vous devez vous connecter pour publier un commentaire.
ATTENTION! SI VOUS travaillez SOUS iOS8/XCODE6 VOIR MA mise à JOUR ci-DESSOUS
Pour ceux qui cherche encore la réponse ici est le code de "conseillé" de manière à enregistrer l'image dans NSUserDefaults. Vous ne DEVEZ PAS enregistrer les données d'image directement dans NSUserDefaults!
Écrire des données:
Lire les données:
documentsPathForFileName:
Pour iOS8/XCODE6
Comme tmr et DevC mentionné dans les commentaires ci-dessous il y a un problème avec xcode6/ios8. La différence entre xcode5 et xcode 6 processus d'installation est que xcode6 changements apps UUID après chaque course dans xcode (voir mise en évidence partie du répertoire: /var/mobile/Conteneurs/Data/Application/B0D49CF5-8FBE-4F14-87AE-FA8C16A678B1/Documents/image.jpg).
Il y a donc 2 solutions:
Voici swift version de code comme un bonus (avec la 2ème méthode):
Écrire des données:
Lire les données:
documentsPathForFileName:
NSURLIsExcludedFromBackupKey
la valeur de la ressource (comme expliqué ici: developer.apple.com/library/ios/qa/qa1719/_index.html). J'ai besoin d'être dans le répertoire documents, car il doit être très persistante. Pensez-vous que c'est OK? Ou est-il un autre endroit, vous recommanderais de?Pour enregistrer une image dans NSUserDefaults:
De récupérer une image à partir de NSUserDefaults:
Alors qu'il est possible d'enregistrer un
UIImage
àNSUserDefaults
, il n'est souvent pas recommandé car il n'est pas le moyen le plus efficace pour enregistrer des images; un moyen plus efficace consiste à enregistrer votre image dans l'applicationDocuments Directory
.Pour les fins de cette question, j'ai joint la réponse à votre question, ainsi que la façon la plus efficace de sauvegarder une
UIImage
.NSUserDefaults (Non Recommandé)
D'économie à NSUserDefaults
Cette méthode vous permet d'enregistrer tout
UIImage
àNSUserDefaults
.C'est comment vous l'appelez:
Chargement De NSUserDefaults
Cette méthode permet de charger tout
UIImage
deNSUserDefaults
.C'est comment vous l'appelez:
Une Meilleure Alternative
Enregistrement de Documents Répertoire
Cette méthode vous permet d'enregistrer tout
UIImage
à laDocuments Directory
au sein de l'application.C'est comment vous l'appelez:
Chargement De Documents Répertoire
Cette méthode permet de charger tout
UIImage
de l'applicationDocuments Directory
.C'est comment vous l'appelez:
Une Autre Alternative
Économie UIImage à la Bibliothèque de Photos
Cette méthode vous permet d'enregistrer tout
UIImage
de l'appareilPhoto Library
, et est appelé comme suit:De l'enregistrement de plusieurs UIImages à la Bibliothèque de Photos
Cette méthode vous permet d'enregistrer plusieurs
UIImages
de l'appareilPhoto Library
.C'est comment vous l'appelez:
Où
images
est votreNSArray
composé deUIImages
.inDirectory:(NSString *)directoryPath
- pourriez-vous appeler ce que vous voulez comme "myAppData"??Pour swift 2.2
À stocker:
À récupérer:
Pour Swift 4
J'ai presque tout essayé dans cette question, mais aucun n'a fonctionné pour moi. et j'ai trouvé ma solution.
j'ai d'abord créé une extension pour UserDefaults comme ci-dessous, puis juste appelé méthodes get et set.
pour définir l'image comme arrière-plan dans settingsVC j'ai utilisé le code ci-dessous.
dans mainVC :
Oui , techniquement possible comme dans
[[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation(image) forKey:@"foo"];
Mais pas conseillé, car les plists ne sont pas des endroits appropriés pour les grandes gouttes de données binaires en particulier User Prefs. Il serait préférable d'enregistrer l'image sur le dossier documents de l'utilisateur et stocker la référence à l'objet en tant que l'URL ou le chemin d'accès.
De la documentation d'apple,
Vous pouvez enregistrer l'image comme ceci:-
Et lire comme ceci:-
Pour Swift 3 et JPG format
Registre Par Défaut De L'Image :
Enregistrer L'Image :
Chargement De L'Image :
C'est techniquement possible, mais il n'est pas conseillé. Enregistrez l'image sur le disque au lieu. NSUserDefaults est destiné pour les petits réglages, pas de gros fichiers de données binaires.
Enregistrer l'image sur NSUserDefault:
Charger une Image à partir de NSUserDefault:
Oui, vous pouvez utiliser. Mais puisque c'est pour le stockage de vos préférences, vous pouvez mieux enregistrer les images dans un dossier de documents.
Et vous pouvez avoir le chemin d'accès dans la
NSUserDefaults
, si nécessaire.Depuis que cette question a un haut index de recherche google - voici @NikitaTook réponse dans la journée d'aujourd'hui et l'âge, c'est à dire Swift 3 et 4 (à l'exception de la manipulation).
Note: Cette classe est uniquement écrit pour lire et écrire des images de format JPG pour le système de fichiers. Le
Userdefaults
choses doivent être manipulés de l'extérieur.writeFile
prend le nom de fichier de votre image jpg (avec .extension jpg) et leUIImage
lui-même et renvoie true si elle est en mesure d'enregistrer ou d'autre renvoie false si elle est incapable d'écrire l'image, au point où vous pouvez stocker l'image dansUserdefaults
qui serait votre plan de sauvegarde ou tout simplement réessayer une fois de plus. LereadFile
fonction prend dans le nom du fichier image et renvoie unUIImage
, si le nom de l'image transmise à cette fonction est trouvée, alors il renvoie cette image sinon elle retourne une valeur par défaut de l'espace réservé d'image à partir de l'app de l'actif du dossier (de cette façon, vous pouvez éviter les mauvaises accidents ou d'autres comportements bizarres).