2009-08-24 8 views
0

J'écris une application simple pour copier un ensemble d'images à la photothèque de l'utilisateur afin que l'utilisateur puisse les utiliser comme arrière-plans. Le problème est que si l'utilisateur exécute l'application plus d'une fois, les images en double seront copiées dans la photothèque. Compte tenu des restrictions imposées par Apple sur l'accès au contenu de la photothèque, quelle est la manière la plus simple, le cas échéant, d'éviter d'écrire un fichier en double dans la bibliothèque?Comment éviter de copier des images en double sur la photothèque de l'iPhone?

Ben

Répondre

0

Vous pouvez stocker les données d'images qui ont été enregistrées dans votre application en les écrivant dans un fichier ou à l'aide des données de base, de cette façon vous savez qui ont été sauvés et qui n'ont pas. Y

+0

En fait, c'était la première solution qui m'est venue à l'esprit. Le problème avec cette approche est que si un utilisateur supprime une image, la simple consultation d'une liste d'images précédemment enregistrées ne reflétera pas le fait que le fichier n'existe plus et l'application refusera de restaurer le fichier. – Ben

+0

Le problème de base est: si je connais le nom d'un fichier, comment puis-je savoir s'il existe ou non un fichier avec le même nom dans la photothèque? – Ben

+0

Dans ce cas, l'utilisateur choisit une photo de la bibliothèque, l'enregistre, puis la convertit en jpeg ou en png (qui obtient les données) et vous la stockez. Ensuite, lorsque l'utilisateur le choisit de nouveau et que vous obtenez les données de la même façon, vous devriez pouvoir voir si les octets des données d'image correspondent déjà aux octets d'une image précédemment stockée, si c'est le cas – Daniel

0

Cette réponse est un peu tardive, mais une réponse tardive est meilleure que pas de réponse du tout. La réponse est qu'il n'y a aucun moyen de vérifier la photothèque (PL) pour une image dupliquée (au moins dans les limites de l'API publique). La seule façon d'écrire à la bibliothèque de photos est via la fonction globale UIKit:

void UIImageWriteToSavedPhotosAlbum (
    UIImage *image, 
    id  completionTarget, 
    SEL  completionSelector, 
    void  *contextInfo 
); 

Ce code écrit simplement l'instance de UIImage à la bibliothèque de photos. Aucun de ses quatre paramètres ne représente un objet supplémentaire pouvant potentiellement être identifié avec l'image. Les enveloppes UIImage ou CGImage it ne fournissent pas non plus un emplacement pour les "métadonnées" de ce type. Bien sûr, on peut toujours sous-classer, mais malheureusement il n'y a aucun moyen d'inspecter le contenu du PL. Le PL est un magasin persistant en écriture seule dont le contenu, au moins en ce qui concerne le programmeur d'API, est essentiellement anonyme. Comme un trou noir, la photothèque a une "surface à sens unique".