我在将新创建的SPPlaylist
移动到(可能是新创建的)SPPlaylistFolder
时遇到问题。
我们的想法是在用户的Spotify帐户中创建一个文件夹,我可以在其中添加从我的应用程序生成的播放列表。如果没有创建这样的文件夹,我正在创建一个新的SPPlaylistFolder
并保存文件夹ID以供以后使用。
这就是我正在做的事情(我已经省略了对这个主题不感兴趣的部分代码):
如果先前保存了folderId
(即创建了一个文件夹),请使用该ID加载文件夹实例:
...
NSError *error = nil;
if (folderId > 0) {
// try to fetch folder
folder = [[SPSession sharedSession] playlistFolderForFolderId:folderId inContainer:container];
}
if (folder == nil) {
// create folder
folder = [container createFolderWithName:@"My Folder" error:&error];
// save a reference to the folder in an instance var
_appFolder = [folder retain];
// (also saving folder.folderId in NSUserDefaults)
}
...
创建SPPlaylist
:[[[SPSession sharedSession] userPlaylists] createPlaylistWithName:@"My Playlist"]
。
使用KVO观察容器的playlists
属性,并在创建播放列表时收到通知:[[[SPSession sharedSession] userPlaylists] addObserver:self forKeyPath:@"playlists" options:0 context:nil]
。
观察playlists
属性并将创建的播放列表移至我的SPPlaylistFolder
(containerPlaylist
是我确定要移动的播放列表):
...
// identify the index of the containerPlaylist
NSInteger playlistIndex = [[[[SPSession sharedSession] userPlaylists] playlists] indexOfObject:containerPlaylist];
// move playlist
NSError * error = nil;
BOOL success = [container movePlaylistOrFolderAtIndex:playlistIndex ofParent:nil toIndex:0 ofNewParent:_appFolder error:&error];
if (success) {
// This should be a great success. But the playlist hasn't been moved, although the error variable is nil.
}
...
完成这些步骤后,播放列表和文件夹都已创建,但播放列表尚未移动。而且我没有收到任何错误,表明movePlaylistOrFolderAtIndex
方法输入无效。
我错过了一些明显的东西吗?或者移动功能是否存在缺陷?
注意:我还尝试使用此代码移动之前创建的播放列表(即将名为“我的播放列表”的所有播放列表移动到该文件夹中)。
编辑1:我对此进行了进一步的调查,实际上还有一些动作正在进行中。但是我不得不重写一些代码并多次执行移动(或者在稍后阶段)。看起来这与SPSession中的数据没有完全同步/最新(?)有关,因为稍后使用新会话进行日志记录时可以移动播放列表。
它是否可能是一个同步问题,即libspotify认为SPPlaylistFolder
已创建并将SPPlaylist
移至它,而实际上尚未创建它?
答案 0 :(得分:0)
在参考this issue on cocoalibspotify更新我的代码后,它的效果更好。我最初没有意识到的是与Spotify服务的同步是如何工作的。例如,可能需要几分钟才能将更改反映在Spotify桌面客户端中。