سؤال

أواجه مشكلات في نقل ملف تم إنشاؤه حديثًا SPPlaylist إلى (ربما تم إنشاؤه حديثًا) SPPlaylistFolder.

تتمثل الفكرة في إنشاء مجلد في حساب Spotify الخاص بالمستخدم، حيث يمكنني إضافة قوائم التشغيل التي تم إنشاؤها من تطبيقي.إذا لم يتم إنشاء مثل هذا المجلد، فأنا أقوم بإنشاء مجلد جديد SPPlaylistFolder واحفظ معرف المجلد لاستخدامه لاحقًا.

هذا ما أفعله (لقد حذفت أجزاء من الكود غير مثيرة للاهتمام لهذا الموضوع):

  1. اذا كان folderId تم حفظه مسبقًا (أيتم إنشاء مجلد)، استخدم هذا المعرف لتحميل مثيل المجلد:

    ...
    
    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)
    }
    
    ...
    
  2. يخترع SPPlaylist: [[[SPSession sharedSession] userPlaylists] createPlaylistWithName:@"My Playlist"].

  3. استخدم KVO لمراقبة الحاوية playlists الخاصية والحصول على إشعار عند إنشاء قائمة التشغيل: [[[SPSession sharedSession] userPlaylists] addObserver:self forKeyPath:@"playlists" options:0 context:nil].

  4. مراقبة 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ق إليها، دون أن يتم إنشاؤها فعلا حتى الآن؟

هل كانت مفيدة؟

المحلول

بعد تحديث الكود الخاص بي بالإشارة إلى هذه المشكلة على Coalibspotify, ، إنه يعمل بشكل أفضل.ما لم أدركه في البداية هو كيفية عمل المزامنة مع خدمة Spotify.قد يستغرق الأمر عدة دقائق حتى تنعكس التغييرات في عميل سطح المكتب Spotify، على سبيل المثال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top