【发布时间】:2017-05-19 01:40:06
【问题描述】:
我从文件加载图像时遇到了愚蠢的问题。我有两个视图放在 UITabBarController 上。
在第一次查看时,用户可以从照片库或相机中加载他的图像。第二个视图呈现这张照片。该文件在服务器上。如果用户没有选择他的图像服务器发送自定义图像。如果有上传的照片,它会推送用户的照片。
当用户点击按钮时,会有一个带有选项的菜单。例如,我们将决定从照片库中拍照。用户拍照后:
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)
}
之后用户可以看到选择的图片,一切正常。当用户更改选项卡时,第二个视图将刷新其上的所有数据,并再次从服务器下载所有图像和数据。不幸的是,包含旧用户图像的图像不会刷新,并且仍然存在旧照片。
当我们回到第一个标签时,图片会在几秒钟后恢复到旧图片。
最奇怪的是,如果我正在检查服务器是否有新上传的图像并且在应用程序容器中它也存在。当我重新启动应用程序时,一切正常。
看起来此图像已保存在内存中,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")!
}
【问题讨论】:
标签: ios swift uiimageview uiimage nsfilemanager