使用时出错 - [MPMediaPlaylist addItemWithProductID:completionHandler:]

时间:2016-04-27 23:49:03

标签: ios storekit ios9.3 apple-music

我尝试使用9.3中的新Apple Music API将歌曲添加到我的应用创建的播放列表中,而不将其添加到用户的库中。

考虑产品ID 316654632,它是凤凰城在美国iTunes Store中的歌曲Lisztomania。

使用以下代码,我可以播放歌曲

MPMusicPlayerController *musicPlayer = [MPMusicPlayerController systemMusicPlayer];  
[musicPlayer setQueueWithStoreIDs:@[@"316654632"]];  
[musicPlayer play];  

使用以下代码,我可以将歌曲添加到Apple Music库

[[MPMediaLibrary defaultMediaLibrary] addItemWithProductID:@"316654632" completionHandler:^(NSArray<__kindof MPMediaEntity *> * _Nonnull entities, NSError * _Nullable error) {  
    NSLog(@"%@", error);  
}];  

错误是零,我可以在我的图书馆看到这首歌。

但尝试使用播放列表也不行。

[[MPMediaLibrary defaultMediaLibrary] getPlaylistWithUUID:uuid creationMetadata:[[MPMediaPlaylistCreationMetadata alloc] initWithName:@"Test Playlist"] completionHandler:^(MPMediaPlaylist * _Nullable playlist, NSError * _Nullable error) {  
    NSLog(@"%@", error);

    if (!error) {  
        [playlist addItemWithProductID:@"316654632" completionHandler:^(NSError * _Nullable error) {  
            NSLog(@"%@", error);  
        }];  
    }  
}];  

播放列表已创建,我可以在Music.app中看到它,但当我尝试添加相同的产品ID时,我播放了&amp;添加到我的库到播放列表,我收到错误

Error Domain=MPErrorDomain Code=4 "The requested id could not be found" UserInfo={NSLocalizedDescription=The requested id could not be found}

但是如果我成功将相同的项目添加到我的库中怎么能找不到呢?

更新

好消息! Apple在10.2.1确定了rdar:// 26408683!

1 个答案:

答案 0 :(得分:4)

在我的播放列表转换应用(mixlib)中,我发现可靠地将一些曲目添加到新创建的播放列表中的唯一解决方案是等待

在我的测试中,等待五秒似乎已经足够了。

[[MPMediaLibrary defaultMediaLibrary] getPlaylistWithUUID:uuid creationMetadata:[[MPMediaPlaylistCreationMetadata alloc] initWithName:@"Test Playlist"] completionHandler:^(MPMediaPlaylist * _Nullable playlist, NSError * _Nullable error) {  
if (!error) {  
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5 /*seconds*/ * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)), ^() {
        [playlist addItemWithProductID:@"316654632" completionHandler:^(NSError * _Nullable error) {  
            NSLog(@"%@", error);  
    }];  
}  
}];  

我怀疑这是与服务器/网络相关的问题,因为它有时可以无需等待。 &#34;请求ID&#34;找不到的可能是播放列表ID,而不是曲目ID。

当它开始为播放列表工作时,它将始终有效。因此,在添加每个附加曲目之前,您不需要等待,但只能在添加第一个曲目之前。