在切换到另一个控制器后,在控制器中处理响应

时间:2016-10-23 19:46:56

标签: ios objective-c swift swift2 cloudinary

我使用Cloudinary来存储用户在我的Swift 2应用中上传的图片。我对流程/架构有疑问。目前我正在做的是,一旦用户上传图像,我就将图像发送到Cloudinary,将图像ID发送到我的服务器,并立即将用户转到下一个屏幕。有了id,我以后可以在Cloudinary上引用图像,所以从技术上讲,我不需要等待Cloudinary的响应并让用户等待。是的,如果上传失败,我不会知道,但这些是边缘情况。这是我的代码:

@IBAction func btnRegister(sender: AnyObject) {
    let pictureId = self.btnImage.currentImage == NSUUID().UUIDString
    self.uploadToCloudinary(pictureId)

    //send to my server
    User.register(_userName, password: _password, picture: pictureId)
        .success { (value) in
         self.performSegueWithIdentifier("Home", sender: self)
         }
}

func uploadToCloudinary(pictureId:String){
        let image = UIImagePNGRepresentation(btnImage.currentImage!)! as NSData
        let uploader = CLUploader(_cloudinary, delegate: self)
        uploader.upload(image, options: ["public_id":pictureId], withCompletion:onCloudinaryCompletion, andProgress:onCloudinaryProgress)
}

func onCloudinaryCompletion(successResult:[NSObject : AnyObject]!, errorResult:String!, code:Int, idContext:AnyObject!) {
        //
}

然而,我现在意识到我需要保存一些其他细节,例如"版本" Cloudinary将我发回给我,所以我可能需要在onCloudinaryCompletion上做一些事情来将这些细节发送到我的服务器。问题是 - 这意味着我现在必须让用户等到图像完成上传才能将它们转移到下一个屏幕。

所以我的问题:

  1. 在Swift中,即使用户已经转移到另一个视图控制器,我仍然可以在完成处理程序中执行操作吗?这样我可以保持当前的流量,只要它返回时保存successResult,但我不必让我的用户等待。

  2. 还有其他推荐的流程可以做这样的事吗?欢迎任何建议。

  3. 对于那些熟悉Cloudinary的人 - 有没有办法在上传前知道版本?因为我真正需要的只是版本,如果我在上传之前可以知道,我可以将其与图片ID一起保存,并忘记onCloudinaryCompletion。

1 个答案:

答案 0 :(得分:1)

从Cloudinary的角度来看,您可以使用以下方法之一: