2015-12-02 4 views
0

Я пытаюсь добавить название песни и исполнителя в базу данных каждый раз, когда песня меняется. В настоящее время программа делает это, но по какой-то причине, когда я перехожу к следующей песне, одна и та же песня добавляется несколько раз в базу данных, т. Е. Song 1 добавляется 6 раз в разбор. Почему это происходит и как я могу это исправить?Является ли функция вызываемой более одного раза?

func applicationDidEnterBackground(application: UIApplication) { 
    print("entered background") 


    NSNotificationCenter.defaultCenter().addObserver(self, selector: "getNowPlayingItem", name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification, object: nil) 
    musicPlayer.beginGeneratingPlaybackNotifications() 

    backgroundTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({() -> Void in 

     UIApplication.sharedApplication().endBackgroundTask(self.backgroundTask!) 
     self.backgroundTask = UIBackgroundTaskInvalid 
    }) 


} 



func getNowPlayingItem() { 
    if let nowPlaying = musicPlayer.nowPlayingItem { 
     let title = nowPlaying[MPMediaItemPropertyTitle] 
     let artisttest = nowPlaying[MPMediaItemPropertyTitle] 
     if let artist = nowPlaying[MPMediaItemPropertyArtist] { 

      let objectPointer = PFObject(className: "Pointer") 
      let object = PFObject(className: "MasterSongs") 



      let query = PFQuery(className: "Pointer") 
      query.findObjectsInBackgroundWithBlock({ 
       (objects: [AnyObject]?, error: NSError?) -> Void in 
       var objectIDs = objects as! [PFObject] 

       for i in 0...objectIDs.count-1{ 
        self.Parsearray.append((objectIDs[i].valueForKey("title") as? String)!) 


       } 


       if self.Parsearray.contains(title! as! String){ 
        print("already in db") 
       }else{ 


       objectPointer["title"] = title 
        objectPointer["user"] = PFUser.currentUser() 
        objectPointer["artist"] = artist 
        objectPointer.saveInBackground() 
        //parseClass.saveInBackgroundWithBlock{(success: Bool, error: NSError!) -> Void in 
        objectPointer.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in 
         if success == false { 
          print(error) 
         } else { 
          print("Posted succesfully") 
         } 
        }) 

       } 

      }) 




     } 

      if(artisttest == nil){ 
       let objectPointer = PFObject(className: "Pointer") 


       let query = PFQuery(className: "Pointer") 
       query.findObjectsInBackgroundWithBlock({ 
        (objects: [AnyObject]?, error: NSError?) -> Void in 
        var objectIDs = objects as! [PFObject] 

        for i in 0...objectIDs.count-1{ 
         self.Parsearray.append((objectIDs[i].valueForKey("title") as? String)!) 

        } 


        if self.Parsearray.contains(title! as! String){ 
         print("already in db") 
        }else{ 
         objectPointer["title"] = title 
         objectPointer["user"] = PFUser.currentUser() 
         objectPointer["artist"] = "No artist found :(" 
         objectPointer.saveInBackground() 


        } 

       }) 





      } 


     } 




} 
func applicationWillEnterForeground(application: UIApplication) { 

     NSNotificationCenter.defaultCenter().removeObserver(self) 

} 
+0

Мое предположение: вы каждый раз добавляете наблюдателя, который будет называть 'getNowPlayingItem', но вы его не удаляете. Поэтому, когда 'applicationDidBecomeActive:' удаляет наблюдателя. – Larme

+0

Ха-ха, ты избил меня! –

ответ

0

Одна вещь, которую я замечаю, что вы добавляете наблюдателю MPMusicPlayerControllerNowPlayingItemDidChangeNotification каждый раз, когда applicationDidEnterBackground называется.

Вы не указали функцию applicationDidEnterForeground - но, надеюсь, вы удаляете этих наблюдателей. Если вы не удалите наблюдателей, это вызовет вызывающий переключатель для applicationDidEnterBackground. Таким образом, 6 applicationDidEnterBackground = 6 getNowPlayingItem.

+0

Я обновил свой код, но я все еще сталкиваюсь с той же ошибкой. – tman0542

+0

Он добавляется несколько раз, даже когда я открываю приложение. – tman0542

Смежные вопросы