Frage Fehler bei der Verwendung von - [MPMediaPlaylist addItemWithProductID: completionHandler:]


Ich versuche, die neuen Apple Music APIs von 9.3 zu verwenden, um einen Titel zu einer von meiner App erstellten Wiedergabeliste hinzuzufügen, ohne ihn der Bibliothek des Benutzers hinzuzufügen.

Betrachten Sie die Produkt-ID 316654632, es ist das Lied Lisztomania von Phoenix, in den USA iTunes Store.

Mit dem folgenden Code kann ich den Song abspielen

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

Mit dem folgenden Code kann ich das Lied zu meiner Apple Music-Bibliothek hinzufügen

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

Fehler ist Null und ich kann das Lied in meiner Bibliothek sehen.

Aber das Gleiche mit einer Playlist funktioniert nicht.

[[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);  
        }];  
    }  
}];  

Die Wiedergabeliste wurde erstellt, ich kann sie in Music.app sehen, aber wenn ich versuche, dieselbe Produkt-ID hinzuzufügen, die ich in meiner Bibliothek zur Wiedergabeliste gespielt und hinzugefügt habe, erhalte ich eine Fehlermeldung

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

Aber wie konnte es nicht gefunden werden, wenn ich den gleichen Gegenstand meiner Bibliothek erfolgreich hinzugefügt habe?

AKTUALISIEREN

Gute Nachrichten! Apple hat rdar: // 26408683 auf 10.2.1!


5
2018-04-27 23:49


Ursprung


Antworten:


In meiner Playlist-Conversion-App (Mixlib), die einzige Lösung, die ich gefunden habe, um zuverlässig einige Tracks zu einer neu erstellten Playlist hinzufügen zu können warten.

In meinen Tests Warten fünf Sekunden scheint genug zu sein.

[[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);  
    }];  
}  
}];  

Ich vermute, dass es sich um ein Server / Netzwerk-Problem handelt, da es manchmal ohne Warten funktioniert. Die "angeforderte ID", die nicht gefunden wird, kann die Playlist-ID sein, nicht die Track-ID.

Wenn es für eine Playlist funktioniert, wird es immer funktionieren. Sie müssen also nicht warten, bevor Sie jeden weiteren Track hinzufügen, sondern erst, bevor Sie den ersten hinzufügen.


4
2018-05-27 09:22