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



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

@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!) {
        //
}

然而,我现在意识到我需要保存一些额外的细节,如"版本",cloudinarycompletion发送给我,所以我可能需要在onCloudinaryCompletion上做一些事情来发送这些细节到我的服务器。这意味着我必须让用户等到图片上传完成之后才能segue到下一个屏幕

我的问题是:

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

  2. 是否有其他推荐的流程来做这样的事情?

  3. 对于那些熟悉cloudary的人——在上传之前有办法知道版本吗?因为我真正需要的是版本,如果我能在上传之前知道,我可以把它和图片Id一起保存,忘记onCloudinaryCompletion。

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

  • 避免使用版本- URL版本基本上只是在图像更新时破坏缓存的一种方法。如果这不是必需的,那么你可以从URL中删除它。
    参见:https://support.cloudinary.com/hc/en-us/articles/202520912-What-are-image-versions-

  • 使用我们的Webhooks支持-这将告诉cloudary通知您的服务器有关上传文件的所有必要细节(包括公共ID和版本),然后您可以将其存储在数据库中。
    参见:http://cloudinary.com/blog/webhooks_upload_notifications_and_background_image_processing

最新更新