목록분류 전체보기 (379)
나의 발자취
Alamofire의 DataResponse에서 실제 응답 데이터는 .data 프로퍼티를 통해 접근해야 한다. 데이터에 한번 담겨서 오기 때문~ 예를 들어// 잘못된 접근UserDefaults.standard.set(response.userId, forKey: "userId") // ❌ // 올바른 접근UserDefaults.standard.set(response.data.userId, forKey: "userId") // ✅ Alamofire에서 사용하는 응답 처리 메서드 responseDecodable: JSON 응답을 Codable 객체로 디코딩 .responseDecodable(of: CheckTodayUploadResponse.self) { response in // respons..
개발하려는 사항유저가 이미 참여하고 있는 챌린지면, ChallengeDetailView에서 "나도 참여하기" 버튼이 보이면 안되고 대신 progress bar, 그리고 카메라 버튼이 보여야한다.유저의 챌린지 참여 상태를 계속 기억해야하고, 유저의 챌린지 참여 기간이 끝날때까지 유저는 이 뷰를 봐야한다.유저가 참여중인 챌린지는 챌린지 뷰모델에서 fetchParticipatingChallenges, isParticipatingIn 와 관련되어있다. 일단, 챌린지 디테일 뷰에서, 챌린지 뷰모델을 참고하고 있다.이 뷰 모델의 어노테이션을 ObservedObject에서 StateObject로 바꿔준다. 1. @ObservedObject뷰가 다시 그려질 때마다 새로운 인스턴스가 생성될 수 있음부모 뷰로부터 전달받..
contextMenu는 iOS에서 3D Touch나 길게 눌렀을 때 나타나는 팝업 메뉴다. 사진을 3d 터치로 눌러서 신고하기 버튼을 누른다고 할 때 나타나는 바로 여기다. 내 앱은이미지를 길게 누르거나 3D Touch하면"신고하기" 옵션이 포함된 메뉴가 팝업으로 나타나고그 메뉴에서 "신고하기"를 선택하면 ReportView가 표시되는 구조이다. 문제 상황현재 ChallengeImagesGrid.swift에서 '신고하기'를 누르면 아래와 같이 바로 접수 화면으로 넘어가야하는데, 로딩이 오래걸리는지 뭔지 흰 화면만 뜨는것이다. 지금 상황은 contextMenu 안에서 showReportView.toggle()을 호출그리고 별도의 .sheet modifier에서 ReportView를 표시이 구조에서 ..
generateTestData를 만들어주고 이미지를 랜덤으로 가져오도록 했다.그리고 미안하지만 user id 1은 희생양이 되었다. 하루에 하나의 사진만 업로드가 가능하므로, 벌크 업로드를 위해 createdAt을 오늘 날짜랑 겹치지 않게 바꾸어주었다. 그리고 일단 테스트를 위해 챌린지 id = 11에다가 넣어주었다. 마지막으로, 터미널에서 파일을 실행해준다. 그럼 아래와 같이
스위프트를 하면서 심심찮게 \.self 나 \.dismiss를 볼 수 있다. 이는 KeyPath인데, KeyPath는 타입의 특정 속성을 참조하는 방법입니다. 쉽게 말해서 "경로"를 나타내는 것 예시는 이렇다.struct Person { let name: String let age: Int}let people = [ Person(name: "Kim", age: 25), Person(name: "Lee", age: 30), Person(name: "Park", age: 35)]// 1. KeyPath 사용let names = people.map(\.name) // ["Kim", "Lee", "Park"]// 위 코드는 아래와 동일:// let names = people.map ..
// 2-1. 챌린지 이미지 조회 APIconst getChallengeImages = async (req, res) => { const { challengeId } = req.params; const { page = 1, limit = 20 } = req.query; // 페이지네이션 적용 try { const images = await ChallengeImage.findAndCountAll({ where: { challenge_id: challengeId }, include: [{ model: User, attributes: ["nickname", "profile_picture"] }], order: [["createdAt", ..
일단, 연습용 빈 레포지토리를 만든다. 그리고 이전에 만든 guestbook을 push 해준다. 애져 포탈에 들어와서 App Services > 웹 앱을 새로 만들어준다. Application Insights 적용 안함 이제 깃에 있는 소스코드가 애져에 배포가 될 것이다.로컬에서 개발을 하고 push를 하게 되면, 자동으로 push event를 받아서 빌드하고 배포를 하는 자동화를 실행해줄것이다.자동화의 경우 .yml 파일로 하는데, 이 파일은 Github Action에서 생성해서 주게 된다. 배포 슬롯 생성을 해준다. 배포 센터에 간다. 소스에서 Github를 선택한다.로그인을 해준다. 기본 인증을 선택해준다. 그러면 이렇게 빨간 알림창이 뜰것이다. 클릭해서 들어가면, '구성'으로 오..