2015-12-29 5 views
0

Я очень новичок в облачном коде, и у меня проблемы. Я уже говорил об этом How to prevent duplicate entry on parse?, и я пытаюсь сделать то же самое. Я пытаюсь предотвратить дублирование записи в моем классе. Я продолжаю получать ошибку в коде облака «Песня уже существует», хотя класс пуст.Как реализовать облачный код?

Это код облака. Я смущен тем, что делает querySongs.equalTo("title", newEntrySong.get("title"));. Он ищет фактическое название слова? потому что мне нужно это, чтобы найти конкретное название.

Parse.Cloud.beforeSave("Pointer", function(request, response) { 

var newEntrySong = request.object; 

var querySongs = new Parse.Query("Pointer"); 
querySongs.equalTo("title", newEntrySong.get("title")); 
//querySongs.equalTo("description", newEntrySong.get("description")); 

// this could be a sort of signature for your song, to make more unique  (skipping spaces and new lines for example) 
// querySongs.equalTo("md5Title", newEntrySong.get("md5Title")); 
querySongs.first({ 
    success: function(temp) { 
    response.error({errorCode:123,errorMsg:"Song already exist!"});   
}, 
error: function(error) { 
    response.success(); 
      } 
    }); 
}); 

Ниже представлен мой код для поиска дубликатов в классе, но он не работает. Нужно ли мне все это заменять? или избавиться от него? так как у меня есть код облака

func getNowPlayingItem() { 

    print("entered function") 
    NSNotificationCenter.defaultCenter().removeObserver(self) 

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


      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!){ 
        print("already in db") 
         NSNotificationCenter.defaultCenter().addObserver(self, selector: "getNowPlayingItem", name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification, object: nil) 
       }else{ 
        objectPointer["title"] = title 
        objectPointer["user"] = PFUser.currentUser() 
        objectPointer["artist"] = artist 
        print("about to save with artist") 
        objectPointer.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in 
         if(error != nil){ 
          print(error) 
         }else{ 
          NSNotificationCenter.defaultCenter().addObserver(self, selector: "getNowPlayingItem", name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification, object: nil) 
          print("saved") 
         } 

        }) 



       } 

      }) 




     }else{ 


      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 with no artist") 
         NSNotificationCenter.defaultCenter().addObserver(self, selector: "getNowPlayingItem", name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification, object: nil) 
       }else{ 
        objectPointer["title"] = title 
        objectPointer["user"] = PFUser.currentUser() 
        objectPointer["artist"] = "No artist found :(" 
        print("about to save") 
         objectPointer.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in 

          if(error != nil){ 
           print(error) 
          }else{ 
           NSNotificationCenter.defaultCenter().addObserver(self, selector: "getNowPlayingItem", name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification, object: nil) 
           print("saved") 
          } 

        }) 


       } 

      }) 





     } 


     } 

} 

ответ

1

beforeSave Функции OP терпит неудачу, чтобы проверить, определен ли или нет запроса дубликата. Как написано, он всегда сообщает дубликат, но может быть исправлено просто ...

var newEntrySong = request.object; 
var querySongs = new Parse.Query("Pointer"); 
querySongs.equalTo("title", newEntrySong.get("title")); 
// whatever else you want to do that defines a duplicate 

querySongs.first().then(function(result) { 
    // this is the check the code was missing 
    if (result) { 
     response.error({errorCode:123,errorMsg:"Song already exist!"}); 
    } else { 
     response.success(); 
    } 
}, function(error) { 
    response.error(error); 
}) 

Если у вас есть это работает, чтобы предотвратить дубликаты, нет необходимости для клиентского кода, чтобы сделать то же самое.

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