在 OS X 上遍历照片库?

Iterate through photo library on OS X?

我正在尝试在 OS X 上遍历用户的照片库。在 iOS 上,我会使用照片框架,但显然 that's not available on OS X,我们应该改用媒体库框架。然而,虽然我能够使用上面链接的代码来访问 MLMediaSource 对象,但我很难弄清楚如何遍历照片资产。

Media Library Framework documentation 引用了 mediaObjectForIdentifier: 方法,这听起来很有前途,但并未指明应使用哪种标识符。我对 iOS 相当有经验,但在 OS X 上是一个完整的 n00b,所以我感觉有点迷茫。

如果我只想遍历用户的图库,对每张照片进行 NSLog,我该怎么做呢?使用媒体库框架,还是使用适用于当前照片库的其他框架?

这个框架不难使用,但是很乏味,因为它async/lazy 加载属性,而 KVO 是唯一想要收到异步完成通知的。

如果要迭代照片,不需要提前知道标识符。

创建媒体库:

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

mediaSources 添加一个 KVO 观察器。访问 mediaSources,如果 non-nil,则进入下一步,否则当你的 KVO 观察者触发时进入下一步。

在下一步中,迭代源,在 rootMediaGroup 上添加一个 KVO 观察器,并在每个源上访问 rootMediaGroup。如果它是 non-nil,现在调用你的迭代器,否则从 KVO 通知处理程序调用它。

对于每个 rootMediaGroup,遵循与上述相同的策略,但对于 mediaObjects。媒体对象是您最终追求的东西。