ios - 如何仅在所有其他代码完成后才运行代码?

标签 ios swift

这是一个愚蠢的问题,写了整个应用程序但仍然不知道这一点...... 现在我有一个“删除帐户按钮”,它会删除所有用户的帖子并执行返回登录屏幕的操作,但似乎并非所有帖子都被删除,因为它在完成之前执行了操作。

有没有办法仅在删除用户帖子后才能执行转场?如所示,最后运行 segue。

func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
    if buttonIndex == 1 { // Post One Pic
        //self.performSegueWithIdentifier("postimage1segue", sender: self)
        var query = PFQuery(className: "Post")
        query.whereKey("userId", equalTo: PFUser.currentUser()!.objectId!)
        query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
            if let objects = objects {
                for object in objects {
                    PFObject.deleteAllInBackground(objects)
                }
            }
        })

        var query1 = PFQuery(className: "PrivatePost")
        query1.whereKey("userId", equalTo: PFUser.currentUser()!.objectId!)
        query1.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
            if let objects = objects {
                for object in objects {
                    PFObject.deleteAllInBackground(objects)
                }
            }
        })

        PFUser.currentUser().deleteInBackground()
        performSegueWithIdentifier("accountdeletedsegue", sender: self)
    }
}

最佳答案

我不太确定 PFUser 是否有 deleteInBackgroundWithBlock: 方法,但您也可以使用 Grand Central Dispatch。

这是 Obj-C 中的示例:

dispatch_group_t group = dispatch_group_create();
dispatch_queue_t bg_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_group_async(group, bg_queue, ^{
    // do something 
});

dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    //when done do something else on main
});

编辑:Swift GCD 组

var downloadGroup = dispatch_group_create()
dispatch_group_enter(group)

// Do something

dispatch_group_leave(group)

dispatch_group_notify(group, GlobalMainQueue) {
    //when something is done do something else on main queue
}

关于ios - 如何仅在所有其他代码完成后才运行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31814652/

相关文章:

ios - UITabBarControllerDelegate 中的变量不更新

objective-c - 内存中缓存,用于保存字符串或NSNumbers

ios - initWithNibName 没有被调用

ios - 状态栏样式 - Swift 3 - 随时更改

Swift - 无法使用 Result<T, Error> 专门化非通用定义

ios - 从 Swift 函数中的异步调用返回数据

ios - 如何在iOS中实现固定侧边导航?

ios - 如何使 UITableviewCell(自定义)高度取决于内容?

ios - 无法在一个 View Controller 上使用两个 UIPickerView

swift - 奇怪的 "' self'在所有成员初始化之前被一个闭包捕获”错误