2016-01-17 2 views
3

J'essaie de parcourir la photothèque d'un utilisateur sur OS X. Sur iOS, j'utiliserais le cadre Photos, mais apparemment that's not available on OS X, et nous sommes censés utiliser la structure de la médiathèque à la place. Cependant, alors que j'étais capable d'utiliser le code lié ci-dessus pour avoir accès à un objet MLMediaSource, j'ai du mal à trouver comment parcourir les ressources photo.Parcourir une photothèque sous OS X?

Le Media Library Framework documentation fait référence à une méthode mediaObjectForIdentifier:, qui semble prometteuse, mais n'indique pas le type d'identificateur à utiliser. Je suis assez expérimenté avec iOS, mais un n00b complet sur OS X, donc je me sens un peu perdu.

Si je voulais juste parcourir la bibliothèque d'un utilisateur, NSLog'ing chaque photo, comment pourrais-je faire à ce sujet? Soit en utilisant Media Library Framework, ou un autre framework aussi longtemps que cela fonctionne pour la bibliothèque Photos actuelle?

+1

Je ne suis pas du tout familier avec ce framework, mais j'ai décidé de passer 15 minutes à fouiller dans les docs en pensant "ça doit être si simple, il a clairement raté quelque chose" ... Et je ne pouvais pas trouver une chose. Peut-être la bibliothèque la moins amicale que j'ai jamais vue. Semble idiot, mais avez-vous essayé d'entrer les noms d'image pour le 'identifier'? Donc, pour les photos, vous voudriez essayer 'IMG_number.JPG'. – Hamish

+0

@ originaluser2 Hahaha merci. :) Et je n'ai pas essayé cela, mais les images sont-elles nécessairement nommées selon ce modèle? Je sais que les photos prises sur un iPhone le sont, mais que se passe-t-il si un utilisateur a des photos d'un appareil photo dans la photothèque? – Nerrolken

+1

c'est vrai ... juste testé et ils ne sont pas nécessairement renommés à l'importation ... Donc je ne sais pas ce que suggèrent! – Hamish

Répondre

3

Ce framework n'est pas difficile à utiliser, mais il est fastidieux car async/lazy charge les propriétés, et KVO est le seul à être averti de l'achèvement asynchrone.

Si vous voulez parcourir les photos, vous n'avez pas besoin de connaître les identifiants à l'avance.

Créer une médiathèque:

self.library = [[MLMediaLibrary alloc] initWithOptions:options];

Ajouter un observateur KVO pour mediaSources. Accédez à mediaSources, si non-nul, passez à l'étape suivante, sinon passez à l'étape suivante lorsque votre observateur KVO se déclenche.

Dans l'étape suivante, parcourez les sources, ajoutez un observateur KVO sur rootMediaGroup et accédez à rootMediaGroup sur chaque source. Si ce n'est pas le cas, appelez votre itérateur maintenant, sinon appelez-le depuis le gestionnaire de notification KVO.

Pour chaque rootMediaGroup, suivez la même stratégie que ci-dessus, mais pour mediaObjects. Les objets médiatiques sont les choses que vous êtes finalement après.