【问题标题】:UIImagePickerController freezes when selecting a picture选择图片时 UIImagePickerController 冻结
【发布时间】:2018-07-02 00:23:05
【问题描述】:

我正在尝试允许用户修改他们的个人资料图片。我已经实现了正确的代码并在我的 plist 中输入了正确的调用。当我选择一张图片并选择“选择”时,我的应用程序崩溃了,我将把我的代码放在下面。

import UIKit
import Firebase

class EditProfileVC: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    view.addSubview(profileImageView)
    setupProfileImageView()

    self.view.backgroundColor = UIColor.white

}
func setupProfileImageView() {
    profileImageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    profileImageView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 100).isActive=true
    profileImageView.widthAnchor.constraint(equalToConstant: 150).isActive = true
    profileImageView.heightAnchor.constraint(equalToConstant: 150).isActive = true
}
lazy var profileImageView: UIImageView = {
    let imageView = UIImageView()
    imageView.image = UIImage(named: "users")
    imageView.translatesAutoresizingMaskIntoConstraints = false
    imageView.contentMode = .scaleAspectFill

    imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)))
    imageView.isUserInteractionEnabled = true
    return imageView
}()

} 我还创建了一个扩展文件

import UIKit

extension EditProfileVC: UIImagePickerControllerDelegate,  UINavigationControllerDelegate{

@objc func handleSelectProfileImageView() {
  let picker = UIImagePickerController()
picker.delegate = self
picker.allowsEditing = true

present(picker, animated: true, completion: nil)
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    var selectedImageFromPicker: UIImage?
    if let editedImage = info["UIImagePickerControllerEditedImage"]
    as? UIImage {
        selectedImageFromPicker = editedImage
    } else if let originalImage = info["UIImagePickerControllerOriginalImage"]
    as? UIImage{
        selectedImageFromPicker = originalImage
    }        
    if let selectedImage = selectedImageFromPicker {
        profileImageView.image = selectedImage
    }

    print(info)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    print("Canceled Picker")
    dismiss(animated: true, completion: nil)

 }
    func imagePickerController(picker: UIImagePickerController,
                           didFinishPickingMediaWithInfo info: [String :   AnyObject])
    {
    if let img = info[UIImagePickerControllerOriginalImage] as? UIImage {

        profileImageView.image = img
    }
}
}

在我的 Plist 中,我在使用说明中放入了隐私照片库。

当我选择我的图片并按选择更新用户个人资料图片时,它崩溃并发送错误消息,

["UIImagePickerControllerEditedImage": 大小 {1122, 1125} 方向 0 比例 1.000000, “UIImagePickerControllerImageURL”: file:///Users/zachwilcox/Library/Developer/CoreSimulator/Devices/C05956CC-616F-42FB-B067-110AF2BD7713/data/Containers/Data/Application/B386A454-C96D-447F-8FB2-5FFCCF1D1780/tmp/63AD5A2C-4214 -4E45-9961-F800699B14E0.jpeg,“UIImagePickerControllerMediaType”:public.image, "UIImagePickerControllerCropRect": NSRect: {{0, 78}, {2456.9999065657889, 2458}},“UIImagePickerControllerReferenceURL”: assets-library://asset/asset.JPG?id=0F3CDF5B-A958-45D2-822E-571323272379&ext=JPG, “UIImagePickerControllerOriginalImage”:大小 {3024, 3780} 方向 0 比例 1.000000]

我不知道这意味着什么,为什么要调用它或如何解决它。如果有人可以帮助我理解为什么会发生这种情况,我将不胜感激!

【问题讨论】:

  • 您的资产或项目文件夹中是否有任何带有“用户”的图像?
  • 您可以尝试从您的惰性变量中删除代码 imageView.image = UIImage(named: "users") 并尝试吗?
  • @KarthickRamesh 我没有,不。我试图让用户从他们的手机中挑选。我将图片从我的计算机拖放到模拟器照片中。
  • NSPhotoLibraryUsageDescription$(PRODUCT_NAME) 需要访问您的照片库,我认为您需要在 pList 中添加权限。

标签: ios swift xcode uiimagepickercontroller


【解决方案1】:

你有一个重复的方法。尝试从您的代码中删除以下内容。

func imagePickerController(picker: UIImagePickerController,
                       didFinishPickingMediaWithInfo info: [String :   AnyObject])
{
if let img = info[UIImagePickerControllerOriginalImage] as? UIImage {

    profileImageView.image = img
}
}

编辑

选择图像后关闭 imagepickercontroller。 包含在 didFinishPickingMediaWithInfo 方法的底部。

dismiss(animated: true, completion: nil)

【讨论】:

  • 感谢您花费时间和精力帮助解决此问题。虽然我仍然遇到同样的问题.. 我更新了我的信息 plist,并认为我做了正确的更改,但它仍然冻结并给我那个错误
  • 不胜感激
  • 您在选择图像后忘记关闭 imagepickercontroller。在 didFinishPickingMediaWithInfo 方法的底部添加这个dismiss(animated: true, completion: nil)。
  • 就是这样!!非常感谢!!
  • 很高兴知道 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
相关资源
最近更新 更多