Iphone 同步后立即从iPod库加载歌曲
我正在开发一个iPhone应用程序,它使用iPod库播放一些歌曲。我用下面的代码加载歌曲。问题是,在设备与iTunes同步后立即运行此代码时,出现了一个问题。显然,iPod库需要更新,这需要一些时间。如果我在同步后立即转到iPod应用程序,我会看到一条消息,上面写着“更新库…”。如果我在应用程序中调用“[query items]”,我会得到一个空数组,表示库中没有歌曲。当更新结束时,一切都很完美。有没有办法解决这个问题?也许是一种检测更新何时结束的方法。我曾尝试侦听所有通知,但在更新完成时没有调用任何通知Iphone 同步后立即从iPod库加载歌曲,iphone,ipod,mpmediaitem,mpmediaquery,Iphone,Ipod,Mpmediaitem,Mpmediaquery,我正在开发一个iPhone应用程序,它使用iPod库播放一些歌曲。我用下面的代码加载歌曲。问题是,在设备与iTunes同步后立即运行此代码时,出现了一个问题。显然,iPod库需要更新,这需要一些时间。如果我在同步后立即转到iPod应用程序,我会看到一条消息,上面写着“更新库…”。如果我在应用程序中调用“[query items]”,我会得到一个空数组,表示库中没有歌曲。当更新结束时,一切都很完美。有没有办法解决这个问题?也许是一种检测更新何时结束的方法。我曾尝试侦听所有通知,但在更新完成时没有调
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];
}
我希望有人能帮忙
Peter我发现实际上有一种方法可以查看更新何时完成。更新结束后,设备将发布通知
[[MPMediaLibrary defaultMediaLibrary] beginGeneratingLibraryChangeNotifications]
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver:self
selector:@selector(iPodLibraryDidChange)
name: MPMediaLibraryDidChangeNotification
object:nil];
唯一的问题是,我无法确定设备是否正在更新iPod库,我应该等待它完成,或者设备库中根本没有任何歌曲。[查询项]在这两种情况下都将返回一个空数组。@Peter是对的-实际上我找到了解决他的问题的方法。 起初,我发现
MPMediaPickerController
在同步时分配和启动时返回nil
——起初我认为可以检查是否有访问库的权限,但有时不起作用。
现在我找到的唯一方法是检查MPMediaLibrary
的lastModificationDate
——只要它在更改,使用MPMediaQuery
就不会得到结果——将更改延迟到属性停止更改的时刻(以您喜欢的任何方式),您应该会没事的。
已经发送了一份关于该问题的错误报告-文档中说,当通知触发时,您应该从库中重新加载缓存对象,但如果
MPMediaQuery
为您尝试查找的每个对象返回nil
,则显然无法执行此操作。我现在实际上也遇到了相同的问题-您解决了吗?您已经复制了来自某人帖子的答案。可能来自此链接