Ios 函数内部代码中的序列-Swift
我有一个功能,当点击like按钮时会被触发,比如facebook的like按钮。我有第一部分,第二部分评论如下。问题是,当代码运行时,代码中没有序列。例如,我需要先运行第一部分,然后运行第二部分,但有时第二部分会先运行。如何添加序列作为运行的优先级Ios 函数内部代码中的序列-Swift,ios,xcode,swift,Ios,Xcode,Swift,我有一个功能,当点击like按钮时会被触发,比如facebook的like按钮。我有第一部分,第二部分评论如下。问题是,当代码运行时,代码中没有序列。例如,我需要先运行第一部分,然后运行第二部分,但有时第二部分会先运行。如何添加序列作为运行的优先级 @IBAction func likeBtn(sender: AnyObject) { /* first part */ if likeTitle == "Like" { va
@IBAction func likeBtn(sender: AnyObject) {
/* first part */
if likeTitle == "Like" {
var likeObj = PFObject(className: "likes")
likeObj["userName"] = PFUser.currentUser()!.username
likeObj["tweetObjectId"] = objectid.text
likeObj.save()
likeBtn.setTitle("Liked", forState: UIControlState.Normal)
}
/* second part */
var likeCount = PFQuery(className: "likes")
likeCount.whereKey("ObjectId", equalTo: objectid.text!)
var likedUsersCount = likeCount.countObjects()
var addLikeCountQuery = PFQuery(className: "comments")
addLikeCountQuery.whereKey("objectId", equalTo: objectid.text!)
addLikeCountQuery.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
for object in objects! {
var ob:PFObject = object as! PFObject
ob["numberOfLikes"] = likedUsersCount
ob.save()
}
}
}
第一部分仅在
likeTitle==“Like”
时运行,因此如果likeTitle!=“就像”
那么您的第一部分将不会运行,但第二部分将始终运行
另一个问题可能是(这里的关键字是“可能”:-)在第一部分中,您调用likeObj.save()
。我不知道您的代码是什么样子的,但这可能是异步的,这意味着它将在后台线程中保存任何需要保存的内容,以避免阻塞主线程,同时您的第二部分代码将继续在主线程上运行
如果是这样的话,那么当保存操作完成时,也许你应该考虑执行某种回调,在那个回调中,你调用第二部分。
即使喜欢标题= = SoeTimes,第二部分运行。我猜想,在第一部分完成保存到数据库之前,第二部分可能已经运行了。如何使用回调方法解决此问题?您可以向save()
方法添加一个参数,该方法是一个函数。在save()
方法中,您需要知道实际完成保存的时间。如果是,则调用作为函数参数提供的函数。您好,Pdodsk,我如何创建一个输入,使系统知道保存操作已完成?我现在看到您正在使用Parse。如果查看的文档,您将看到save()
方法是同步运行的,因此理论上它应该在保存时阻塞主线程。要确定导致此行为的原因,可以尝试使用likedObj.save()
注释掉该行,看看这是否会使代码按预期运行。如果是这样,那就是你的问题:-)。如果您查看PFObject的文档,您将看到有一个saveinbackgroundithblock
,那么是否可以使用它来代替?