bugfix> ios > 投稿

ユーザーがプロフィール画像を変更できるようにしようとしています。正しいコードを実装し、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": size {1122, 1125} orientation 0 scale 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": size {3024, 3780} orientation 0 scale 1.000000]

これが何を意味するのか、なぜ呼ばれたのか、どのように修正するのか、私にはわかりません。誰かが私にこれが起こった理由を理解するのを助けてくれれば、私はそれを大いに感謝します!

回答 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)
    
    

あなたの答え