为什么后台的函数没有被调用?

时间:2015-12-02 17:57:33

标签: ios swift

我有一个程序会在itunes应用程序上记录当前正在播放的歌曲的歌曲名称和艺术家,但是当我点击主页按钮时,该应用程序不再记录标题或艺术家。后台函数有效,因为当我单击主页按钮时,测试功能可以工作,但由于某种原因,getNowPlayingItem不起作用。我该如何解决这个问题?

  var musicPlayer = MPMusicPlayerController.systemMusicPlayer()

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

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


    test()
}

func test(){
      print("Background function working")
        }

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

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

            //    print("Artist: " + artist)


            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)!)

                    // print(self.Parsearray)
                }


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


                }

            })




        }else{
            let object = PFObject(className: "MasterSongs")
            object.setObject(title!, forKey: "title")
            //object.setObject(artist!, forKey: "artist")
            object.saveInBackground()

            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)!)

                    // print(self.Parsearray)
                }


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


                }

            })





        }


    }


}

1 个答案:

答案 0 :(得分:1)

通过这种方式,您可以运行后台任务,让其保持活力3分钟。 仅在应用程序进入后台时启动此功能。

var backgroundTask:UIBackgroundTaskIdentifier? backgroundTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({ () -> Void in UIApplication.sharedApplication().endBackgroundTask(self.backgroundTask!) self.backgroundTask = UIBackgroundTaskInvalid })