2016-04-27 17 views
5

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 Benutzerbibliothek hinzuzufügen.Fehler bei der Verwendung - [MPMediaPlaylist addItemWithProductID: completionHandler:]

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

Verwendung des folgenden Codes, ich das Lied

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

Verwendung des folgenden Codes spielen kann, kann ich den Song zu meinem Apple-Musikbibliothek

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

Fehler ist gleich Null, und ich kann hinzufügen Sieh dir das Lied in meiner Bibliothek an.

Aber das gleiche mit einer Playlist zu versuchen, 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 Playlist erstellt wird, kann ich es in Music.app sehen, aber wenn ich versuche, die gleiche Produkt-ID hinzufügen Ich spielte & die Wiedergabeliste meiner Bibliothek hinzugefügt, erhalte ich einen Fehler

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 Artikel erfolgreich zu meiner Bibliothek hinzugefügt?

UPDATE

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

+0

Haben Sie Glück, eine Lösung zu finden? – TWilly

+0

@TWilly Nope :(Ich habe es sogar auf den Apple Dev Foren und keine Antworten. – Jota

+0

Ich hatte dieses Problem auch, verwendet - [MPMediaPlaylist addMediaItems: completionHandler:] als Workaround. – Dan

Antwort

4

In meiner Playlist-Conversion-App (mixlib) ist die einzige Lösung, die ich gefunden habe, um zuverlässig einige Tracks zu einer neu erstellten Playlist hinzuzufügen, warte. In meinen Tests scheint fünf Sekunden warten zu reichen.

[[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, es ist ein Server/Netzwerk bezogenes Problem, weil es manchmal ohne zu warten, funktioniert. Die "angeforderte ID", die nicht gefunden wird, kann die Playlist-ID sein, nicht die Track-ID.

Wenn es für eine Wiedergabeliste zu arbeiten beginnt, 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.

+0

Hey, was sollten wir in UUID Parameter? Ich habe habe keine Ahnung. –

+1

Ein NSUUID-Objekt. Sie können es mit [NSUUID UUID] erstellen. Speichern Sie es, wenn Sie die Wiedergabeliste später abrufen müssen. – FKDev