終了しないトラブルシューティング
1. FireStore Image Load
最初の画面に写真を載せる時間を減らすことができました…!
私が前の記事で書いたように、ずいぶん前から根強い問題でしたが、過去のバージョンを探していると、突然別の脚注処理のロード方法が見えて、正式なドキュメントを探している間に、
ファイルをすばやくダウンロードする方法
今になってやっと明らかになった...ダウンロード方法を変えればいい.🥲
最初はこの方法を使ったことがありますが、あまりデータを使ったことがないので、あまり差が感じられないのでメモリが心配で他の方法を選びましたが、波長が長回りしてしまいました.
2.イメージを一度だけ受け入れる
今のイメージはすぐに届きましたが、歌は一度では解決できません.😂
最初の2つの画像:オリジナル画像とサムネイルを使用します.
if cellData[indexPath.row].orgImg != nil{
cell.imgPlace.image = cellData[indexPath.row].orgImg
}else{
cell.setImage(cellData[indexPath.row])
}
画像を受け取った後、PlaceDataに写真が保存されているので、Orggrik nilであることを確認し、ダウンロードの繰り返しを避けます.しかし、なぜか、新しい場所を作成または削除するイベントが発生すると、再ダウンロードする現象が発生します.
場所全体の位置がリセットされたのか、orgImgの中に入っていた写真が飛んでしまい、防止の方法が見つからず、結局また
placeImages = [String : UIImage]()
を使用する方法に戻りました.写真をダウンロードするときは、名前とともにplaceImagesに写真を保存し、画面を変換するたびにplaces(場所リスト)とplaceImages(写真リスト)を一緒に使用します.
Custom Cellではなく、ホームページから画像をダウンロードし、ほぼ5回ダウンロードするという奇妙な現象が起こり、Custom CellがEscaping Closeで受信するようになった.
func getImage(place: PlaceData, completion: @escaping (UIImage?) -> ()) {
let fileName = place.name + "_original"
if place.image == true {
let islandRef = storage.reference().child(fileName)
islandRef.getData(maxSize: 1 * 1024 * 1024) { data, error in
let downloadImg = UIImage(data: data! as Data)
if error == nil {
completion(downloadImg)
} else {
completion(nil)
}
}
}else{
let basicImg = UIImage(named: "wethere.jpeg")
completion(basicImg)
}
}
また、FireStoreから基本画像を取得するのではなく、ファイル画像を使用します.3.イメージのロード直後の反映
これは以前にない問題ですが、新しい場所を作成して画像をアップロードすると、画像はアップロードされないのでエラーが発生しました.
なぜなら、画像がロードされていないうちにメイン画面に戻って画像を探していたので、それまではなかったのですが、いつ問題が発生したのか分かりません.
_ = navigationController?.popViewController(animated: true)
画面を閉じるコマンドは、画像のロード後に発生します.アップロード関数に画像を入れます.画像を変更せずに内容のみを変更した場合、画面が反転しないため、アップロードされた画像のすべての場合にコマンドが追加されます.
4.反映画像修正
画像全体を含むplaceimagesをグローバル変数として使用すると、どこでも変更できますので、画像を変更するとすぐに反映されます.
しかし、グローバル変数に画像を入れるのはメモリに問題があるようで、thumbnailを使ってPlaceDataに画像を入れる場合、placeImagesは必要ありません.
その後様々な問題を経てplaceImagesを再利用するが,グローバル変数でなくても画像を変えてもすぐに反映することは困難である.
editData?.newImg = selectedImage
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "newPlaceUpdate"), object: editData)
isImage = true
placeInfoViewでは、場所を削除するために作成されたNotificationを使用しています.PlaceDataでnewImg変数を作成し、PlaceDataをobjectに送信します.
@objc func newUpdate(_ notification: Notification){
newUapdate = true
if notification.object != nil{
let data = notification.object as! PlaceData
if data.newImg != nil{
placeImages.updateValue(data.newImg!, forKey: data.name)
}else{
...
}
}
}
新しく変更された画像がある場合はplaceImagesを更新するか、削除場所を処理します.の最後の部分
以前は島爪で作った2枚の写真をplaceimagesで抜いて混ぜていたのですが、全体的に難しいので、またあちこち修正してしまいました…
どうして一蹴できないの?😭
いろいろ問題がありましたが、やっと解決!!
Reference
この問題について(終了しないトラブルシューティング), 我々は、より多くの情報をここで見つけました https://velog.io/@juyoung999/문제-해결과-원점テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol