如何防止解析时重复输入? [英] How to prevent duplicate entry on parse?
问题描述
我试图保存歌曲信息以进行解析,但如果该歌曲已存在于解析中,我希望我的代码什么都不做.
I' trying to save song info to parse, but if the song already exist in parse I want my code just do nothing.
我已经尝试过下面的代码:
I've tried this code below:
var Music = PFObject(className:"Musics")
var query = PFQuery(className:"Musics")
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
// The find succeeded.
println("Successfully retrieved (objects!.count) scores.")
// Do something with the found objects
if let objects = objects as? [PFObject] {
for object in objects {
var songTitle = object.objectForKey("songTitle") as? String
if songTitle != title {
Music["createdBy"] = PFUser.currentUser()
Music["songTitle"] = title
Music["albumCover"] = imageFile
Music["songArtist"] = artist
Music.saveInBackgroundWithBlock {
(success: Bool, error: NSError?) -> Void in
if (success) {
println("succeed")
} else {
// There was a problem, check error.description
println("error jeh")
}
}
}else{
println("song already exist")
}
}
}
} else {
// Log details of the failure
println("Error: (error!) (error!.userInfo!)")
}
}
上面的代码在日志中给出了以下结果:
the code above give below result on log:
成功检索到 4 个分数.歌曲已经存在成功检索到 4 个分数.歌曲已经存在成功检索到 4 个分数.歌曲已经存在成功检索到 4 个分数.歌曲已经存在成功成功成功成功成功成功成功成功成功成功成功成功
Successfully retrieved 4 scores. song already exist Successfully retrieved 4 scores. song already exist Successfully retrieved 4 scores. song already exist Successfully retrieved 4 scores. song already exist succeed succeed succeed succeed succeed succeed succeed succeed succeed succeed succeed succeed
为什么我的 for 循环比 Objects.count 循环更多?以及如何防止解析时出现重复条目?
Why my for loop , looping more than the Objects.count? and how can I prevent dupiclate entry on parse?
给我任何建议,不管是 obj c 还是 swift
give me any advice, doesn't matter in obj c or swift
推荐答案
我建议在 Parse Cloud 代码上实现一个简单的 beforeSave 触发器,以检查新的入口歌曲是否已经存在(基本上你要制作一个或多个唯一字段.例如:
I suggest to implement a simple beforeSave trigger, on Parse Cloud code, in order to check if the new entry song already exist (basically you're going to make one or more field uniques. For example:
Parse.Cloud.beforeSave("Musics", function(request, response) {
var newEntrySong = request.object;
var querySongs = new Parse.Query("Musics");
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();
}
});
});
希望有帮助.
这篇关于如何防止解析时重复输入?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!