전체 글 (358) 썸네일형 리스트형 ❌ 컬렉션 뷰를 가로 스크롤할 때 다음 이미지가 살짝 보이는 문제 🔍 문제 원인layout.itemSize = CGSize(width: UIScreen.main.bounds.width, height: 300) UIScreen.main.bounds.width는 전체 화면 너비를 기준으로 설정됩니다.하지만, UICollectionView는 UITableViewCell 안에 있어서 contentView.bounds.width를 기반으로 설정해야 합니다.layoutSubviews()에서 collectionView.frame = contentView.bounds로 설정되어 있지만, layout.itemSize가 초기 생성 시점에 설정되므로 변경되지 않을 수 있음.따라서 컬렉션 뷰의 실제 크기보다 itemSize가 작거나 크면, 다음 아이템이 살짝 보이는 문제 발생. 🛠 해결.. ❌ 컴파일 오류 발생... // ❌ 컴파일 오류 발생snapshot.appendItems(viewModel.reviews, toSection: .myReviews)// Error: Cannot convert value of type '[ReviewItem]' to expected argument type '[ProfileItem]' 🔥 원인viewModel.reviews는 [ReviewItem] 타입이지만, Diffable DataSource는 ProfileItem을 다룬다.따라서 ReviewItem을 ProfileItem.review(ReviewItem)으로 변환해야 한다. 1. ProfileItem.review(ReviewItem)으로 변환하는 이유✅ Diffable DataSource는 ProfileItem 타입만 다룰 수.. 📌 회원탈퇴 구현 (Storage, Firestore Database) ✅ 회원 탈퇴 로직 Firebase Storage에서 프로필 이미지 삭제→ deleteProfilePhoto(for: userID)→ 이미지가 없으면 실패해도 계속 진행 (catch { _ in Just(()) })Firestore에서 유저 데이터 삭제→ collectionUsers(deleteUser: userID)Firebase Authentication에서 유저 계정 삭제→ deleteAccount() 1️⃣ Firebase Storage 에서 프로필 이미지 삭제final class StorageManager { // MARK: - Variable static let shared = StorageManager() let storage = Storage.sto.. ✅ 프로필 수정하기! (기존 프로필 입력 창 사용하기) ✅ ProfileCell의 editButton을 눌렀을 때, ProfileDataFormViewController로 이동 & Firebase 업데이트 흐름현재 구현하려는 기능을 정리하면:1️⃣ ProfileCell의 editButton을 누르면 ProfileDataFormViewController로 이동2️⃣ 이동한 ProfileDataFormViewController에서 기존 user 정보를 받아서 표시3️⃣ 유저가 정보 수정 후 "완료" 버튼을 누르면 Firebase에 업데이트4️⃣ ProfileViewController에서 UI를 업데이트하여 변경된 프로필 정보를 반영🔥 가장 좋은 방법은? ✔ Delegate 패턴을 활용해서 수정된 데이터를 ProfileViewController로 전달✔ Fire.. ❌ 문제 해결... ProfileItem이 Hashable 및 Equatable 프로토콜을 준수하지 않는다? ❓ ProfileItem 열거형에 기존의 MovieClipUser 라는 구조체를 데이터 타입으로 사용할 경우 에러 발생 📍데이터 모델 (Item) 만들기enum ProfileItem: Hashable { case profile(MovieClipUser) // 기존 모델 사용 ...} 📍기존 데이터 모델 struct MovieClipUser: Codable { let id: String var username: String = "" var createOn: Date = Date() var bio: String = "" var avatarPath: String = "" var clipMovies: [String] = [] var isUserOnboard.. 💾 Firestore 에 유저 정보 저장 및 이미지 업로드 🔷 StorageManager.swiftfinal class StorageManager { // MARK: - Variable static let shared = StorageManager() let storage = Storage.storage() // MARK: - Function /// 프로필 이미지를 firestore에 저장하는 메서드 func uploadProfilePhoto(with userID: String, image: Data, metaData: StorageMetadata) -> AnyPublisher { return storage .reference() .. 🔥 Firebase Storage에 이미지 업로드, 이미지 주소 URL 가져오기 func uploadAvatar() { let userID = Auth.auth().currentUser?.uid ?? "" // ✅ 유저 ID 가져오기 guard let imageData = imageData?.jpegData(compressionQuality: 0.5) else { return } // ✅ 이미지 데이터 변환 let metaData = StorageMetadata() // Firebase Storage 메타데이터 생성 metaData.contentType = "image/jpeg" // ✅ 파일 타입 설정 StorageManager.shared.uploadProfilePhoto(with: userID, image: imageData, metaData: met.. 📍 Firebase 의 Storage 에 사진 업로드하는 방법 ✅ Firebase 의 Storage 에 저장하는 메서드images/{userID}/profileImage/profileImage_{userID}.jpg 경로를 사용해서 사용자별로 폴더를 구분나중에 리뷰 이미지 등 다른 카테고리를 추가할 확장성도 고려이 메서드는 Firebase Storage에 사용자의 프로필 이미지를 업로드하는 기능을 수행import Foundationimport FirebaseAuthimport FirebaseStorageimport FirebaseStorageCombineSwiftimport Combinefinal class StorageManager { // MARK: - Variable static let shared = StorageManager() .. 이전 1 2 3 4 ··· 45 다음 목록 더보기