Pet*_*ter 11 iphone ipod mpmediaitem mpmediaquery
我正在开发一个使用iPod库播放一些歌曲的iPhone应用程序.我用以下代码加载歌曲.问题是,在设备与iTunes同步后立即运行此代码时出现问题.显然iPod库需要更新,需要一些时间.如果我在同步后立即转到iPod应用程序,我看到一条消息"正在更新库..".如果我在我的应用程序中调用"[查询项目]",那么我会得到一个空数组,表明库中没有歌曲.更新结束后,一切都很完美.有什么方法可以解决这个问题吗?也许是一种检测更新何时结束的方法.我试图听听NSNotifications,但是在更新完成时没有调用.
MPMediaQuery *query = [MPMediaQuery songsQuery];
// convert all items to abstracted media item
NSArray *items = [query items];
NSMutableArray *convertedItems = [[NSMutableArray alloc] initWithCapacity:[items count]];
for (MPMediaItem *item in items) {
REMediaItem *mediaItem = [[REMediaItem alloc] initWithMediaItem:item];
[convertedItems addObject:mediaItem];
[mediaItem release];
}
Run Code Online (Sandbox Code Playgroud)
我希望有人能帮帮忙.
彼得
Pet*_*ter 12
我发现实际上有一种方法可以看到更新完成的时间.更新结束后,设备将发布通知.
[[MPMediaLibrary defaultMediaLibrary] beginGeneratingLibraryChangeNotifications]
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver:self
selector:@selector(iPodLibraryDidChange)
name: MPMediaLibraryDidChangeNotification
object:nil];
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,我找不到一种方法来确定设备是否正在更新iPod库,我应该等待它完成,或者设备根本没有库中的任何歌曲.在两种情况下,[query items]都将返回一个空数组.
@Peter是对的 - 实际上我找到了他的问题的解决方法.起初我发现在同步时分配和启动时MPMediaPickerController返回nil- 首先我认为它可以检查是否可以访问库但有时它不起作用.现在唯一的办法,我发现是检查lastModificationDate的MPMediaLibrary-只要它是不断变化的,你不会得到使用结果MPMediaQuery-耽误您更改了一下时财产停止变化(由你喜欢的任何方式),你应该罚款.已经发送了一个错误报告 - 文档说你应该在通知触发时从库重新加载你的缓存对象,但如果你试图找到的每个对象都MPMediaQuery返回nil,你显然不能这样做.