在转到另一个控制器后在控制器中处理响应
Handing a response in a controller after segueing to another controller
我正在使用 Cloudinary 存储用户在我的 Swift 2 应用程序中上传的图像。我有一个关于 flow/architecture 的问题。目前我正在做的是,只要用户上传图片,我就会将图片发送到 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 发回给我的 "version",因此我可能需要在 onCloudinaryCompletion 上执行一些操作以将这些详细信息发送到我的服务器。问题是——这意味着我现在必须让用户等到图像完成上传,然后我才能将他们转到下一个屏幕。
所以我的问题:
在 Swift 中,即使用户已经转移到另一个视图控制器,我仍然可以在完成处理程序中执行操作吗?这样我就可以保持当前的流程,并在它 returns 时保存 successResult,但我不必让我的用户等待。
做这样的事情还有其他推荐的流程吗?欢迎提出任何建议。
熟悉Cloudinary的朋友们--有没有办法在上传前知道版本?因为我真正需要的是版本,如果我能在上传前知道版本,我可以把它和图片Id一起保存,而忘记onCloudinaryCompletion。
从 Cloudinary 的角度来看,您可以使用以下方法之一:
避免使用版本 - URL 版本基本上只是一种在图像更新时破坏缓存的方法。如果这不是必需的,那么您可以将其从 URL.
中删除
参见:https://support.cloudinary.com/hc/en-us/articles/202520912-What-are-image-versions-
使用我们的 Webhooks 支持 - 这将告诉 Cloudinary 通知您的服务器有关上传文件的所有必要详细信息(包括 Public ID 和版本),然后您可以将这些文件存储在一起在您的数据库上。
参见:http://cloudinary.com/blog/webhooks_upload_notifications_and_background_image_processing
我正在使用 Cloudinary 存储用户在我的 Swift 2 应用程序中上传的图像。我有一个关于 flow/architecture 的问题。目前我正在做的是,只要用户上传图片,我就会将图片发送到 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 发回给我的 "version",因此我可能需要在 onCloudinaryCompletion 上执行一些操作以将这些详细信息发送到我的服务器。问题是——这意味着我现在必须让用户等到图像完成上传,然后我才能将他们转到下一个屏幕。
所以我的问题:
在 Swift 中,即使用户已经转移到另一个视图控制器,我仍然可以在完成处理程序中执行操作吗?这样我就可以保持当前的流程,并在它 returns 时保存 successResult,但我不必让我的用户等待。
做这样的事情还有其他推荐的流程吗?欢迎提出任何建议。
熟悉Cloudinary的朋友们--有没有办法在上传前知道版本?因为我真正需要的是版本,如果我能在上传前知道版本,我可以把它和图片Id一起保存,而忘记onCloudinaryCompletion。
从 Cloudinary 的角度来看,您可以使用以下方法之一:
避免使用版本 - URL 版本基本上只是一种在图像更新时破坏缓存的方法。如果这不是必需的,那么您可以将其从 URL.
中删除 参见:https://support.cloudinary.com/hc/en-us/articles/202520912-What-are-image-versions-使用我们的 Webhooks 支持 - 这将告诉 Cloudinary 通知您的服务器有关上传文件的所有必要详细信息(包括 Public ID 和版本),然后您可以将这些文件存储在一起在您的数据库上。
参见:http://cloudinary.com/blog/webhooks_upload_notifications_and_background_image_processing