ios - 重写后从文件加载图像 - UIImage

标签 ios swift uiimageview uiimage nsfilemanager

我在从文件加载图像时遇到愚蠢的问题。我有两个 View 放入 UITabBarController。

在第一次查看时,用户可以从照片库或相机加载图像。第二个 View 呈现这张照片。该文件位于服务器上。如果用户不选择他的图像服务器发送的自定义图像。如果有上传的照片,则会推送用户的照片。

当用户点击按钮时,会出现一个带有选项的菜单。例如,我们将决定从照片库中拍照。用户拍摄图像后:

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
    self.saveUserImage(userID, imageData: UIImagePNGRepresentation(image)!)
    apiManager.userUploadProfile(userID, imageData: UIImagePNGRepresentation(image)!)

    userImageView.image = image
}


func saveUserImage(userUUID: String, imageData: NSData) {
    let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last
    let savePath = path! + "/\(userUUID)-user.png"
    NSFileManager.defaultManager().createFileAtPath(savePath, contents: imageData, attributes: nil)
}

之后,用户可以看到所选的图片,一切正常。当用户更改选项卡时,第二个 View 将刷新其上的所有数据,并再次从服务器下载所有图像和数据。不幸的是,包含旧用户图像的图像不会刷新,并且仍然有旧照片。

当我们回到第一个选项卡时,图像将返回旧图像,但几秒钟后。

最奇怪的事情是,如果我检查服务器是否有新上传的图像,并且在应用程序容器中它也存在。当我重新启动应用程序时,一切正常。

看起来这个图像保存在内存中,iOS 从 RAM 或其他交换中获取旧版本。如何刷新UIImageView并显示当前保存的图像?

编辑: 有一个加载图像的方法

func userProfilePicture(userId: String) -> UIImage {
    let cacheDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last
    let savePath = cacheDirectory! + "/\(userId)-user.png"

    if NSFileManager.defaultManager().fileExistsAtPath(savePath) {
        if let image = UIImage(named: savePath) {
            return image
        }
    }

    return UIImage(named: "test_avatar")!
}

最佳答案

我无法发表评论,但我遇到了类似的问题,但我有一个问题,图片是在用户更改选项卡之前还是之后上传的?即使调用更新数据库的函数,实际“将新照片/照片路径发送到数据库”也需要一些时间。以下是您的选择,如果切换选项卡时图片不在服务器中,请实现加载 ui,直到成功上传并将新的更新值写入数据库。一个简单的方法是使用 SVProgressHUD pod 并将默认掩码类型设置为 .clear ,这会禁用用户交互。选项2,是通过静态变量,或者在prepare for segue方法中,或者通过结构体,或者任何其他方式传递实际的UIImage,并将需要刷新的图片设置到uiimage,而无需仅从服务器获取它当您切换标签时。

关于ios - 重写后从文件加载图像 - UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41469333/

相关文章:

ios - 如何在 swift 中定义自定义本地化常量

json - 在 Swift 中解析 JSON 时为 nil

ios - 除了 UITextField 之外,如何为 UIImageView 提供约束?

ios - "(NSSet *)touches"中 "event.allTouches"和 "touchesBegan:withEvent:"之间的区别

iphone - UIAlertViewDelegate 类 "self"实例在按下按钮之前被释放

javascript - 如何计算javascript中的日出和日落?

ios - 将 NSData 转换为 CMSampleBufferRef

ios - 通知发出声音但不显示任何内容

swift - 通过达到分数激事件作

ios - 使用框架和图像初始化 ImageView