Iphone 同步后立即从iPod库加载歌曲

Iphone 同步后立即从iPod库加载歌曲,iphone,ipod,mpmediaitem,mpmediaquery,Iphone,Ipod,Mpmediaitem,Mpmediaquery,我正在开发一个iPhone应用程序,它使用iPod库播放一些歌曲。我用下面的代码加载歌曲。问题是,在设备与iTunes同步后立即运行此代码时,出现了一个问题。显然,iPod库需要更新,这需要一些时间。如果我在同步后立即转到iPod应用程序,我会看到一条消息,上面写着“更新库…”。如果我在应用程序中调用“[query items]”,我会得到一个空数组,表示库中没有歌曲。当更新结束时,一切都很完美。有没有办法解决这个问题?也许是一种检测更新何时结束的方法。我曾尝试侦听所有通知,但在更新完成时没有调

我正在开发一个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
,则显然无法执行此操作。

我现在实际上也遇到了相同的问题-您解决了吗?您已经复制了来自某人帖子的答案。可能来自此链接