Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 函数内部代码中的序列-Swift_Ios_Xcode_Swift - Fatal编程技术网

Ios 函数内部代码中的序列-Swift

Ios 函数内部代码中的序列-Swift,ios,xcode,swift,Ios,Xcode,Swift,我有一个功能,当点击like按钮时会被触发,比如facebook的like按钮。我有第一部分,第二部分评论如下。问题是,当代码运行时,代码中没有序列。例如,我需要先运行第一部分,然后运行第二部分,但有时第二部分会先运行。如何添加序列作为运行的优先级 @IBAction func likeBtn(sender: AnyObject) { /* first part */ if likeTitle == "Like" { va

我有一个功能,当点击like按钮时会被触发,比如facebook的like按钮。我有第一部分,第二部分评论如下。问题是,当代码运行时,代码中没有序列。例如,我需要先运行第一部分,然后运行第二部分,但有时第二部分会先运行。如何添加序列作为运行的优先级

 @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
,那么是否可以使用它来代替?