월 48,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
가위바위보 게임 오류가 발생했습니다
안녕하세요강의를 보며 따라하는 중 사진과 같은 오류가 발생했습니다.구글에 검색하여 해결방법을 찾아보니 command + q 를 누르고 다시 실행하는 방법을 찾았습니다.하지만 이것으로도 해결되지 않았습니다..
- 미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
BMI segue 이슈
안녕하세요 강사님,BMI segue 문제로 글남깁니다.강사님이 강의에서 알려주신 "그대로" 따라했는데, 테스트를 위해 iphone app을 켤때마다 계속override func prepare(for segue: UIStoryboardSegue, sender: Any?) { print(#function) if segue.identifier == "toSecondVC" { let secondVC = segue.destination as! SecondViewController secondVC.modalPresentationStyle = .fullScreen let bmi = bmiManager.getBMI(height: heightTextField.text!, weight: weightTextField.text!) secondVC.bmi = bmi } heightTextField.text = "" weightTextField.text = "" }이부분중, let secondVC = segue.destination as! SecondViewController 에서 문제가 발생하며, iphone app 테스트가 중단이 됩니다.이문제를 스스로 해결하기 위해 그동안 강사님이 알려주신 내용들을 저장해둔 notion 웹사이트의 노트 및 google, developer.apple.com웹사이트까지 다 검색을 했는데... 도저히 방법을 못찾겠어서요.. 참고로, 전 Xcode 10.1 버전을 사용중입니다. 어떻게 해결해야 할까요?너무 답답한 마음에 글올립니다. 긴 글 읽어주셔서 감사합니다. Best regards,Minji Kim
- 해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
강의자료 pdf 파일
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의자료 pdf 파일은 없는건가요?? 압축폴더에 swift파일만 있네요. Firstnewapp 만들기 사이즈같은거 보고만들라고 하셨는데 그런 파일이 없어요
- 해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
수업자료 압축
안녕하세요. 오늘부터 강의를 들으려고 합니다.강의자료를 다운받고 압축을 해제하는 과정에서 문제가 발생하여 수업자료를 볼 수 없습니다.혹시 이메일로 자료를 받을 수 있을까요?
- 미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
Model에서의 UIKit import
안녕하세요. 강의 정말 잘 듣고 있습니다.코드 import와 관련하여 궁금한 점이 생겨서 질문을 남깁니다.MVC 패턴과 관련하여 공부하다보니 Model에서는 UIKit을 import 하지 않도록 구현을 해야한다고 들었습니다. 혹시 현재 BMI 리팩토링한 코드와 같이 UIKit을 Model에서 import 하는건 문제가 없는지 알고 싶습니다. 감사합니다.
- 미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
[디자인패턴] Manager 관련 질문드립니다
안녕하세요. 추가해주신 MVVM 강의 정말 잘 듣고 있어요. 그런데, 해당 디자인 패턴에서 Manager에 관련해 궁금한 점이 생겨 질문 글을 남깁니다. 매니저 클래스는 Model과 ViewModel 중 어디에 속하는 객체인가요? 아니면 앱 전체를 동작시키기 위한 로직의 한 부분으로만 바라봐야 하나요? 그저 누구든지 로직의 한 축을 이루도록 도와주는 객체라고 보는게 맞을까요? 뷰 모델도 (어느 정도) 로직을 담당하고, 매니저 클래스도 로직을 담당한다고 생각하니 경계가 모호하다는 생각을 들어 이렇게 질문을 남기게 되었습니다.
- 미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
84강 Member에서 memberId 질문 있습니다.
Member에서 init할 때 memberId를 타입 저장 속성을 1씩 올라가게 해서 삼항연산자로 할당해야 한다고 하신 부분이 이해가 잘 되지않아서 질문 올립니다. 이런 식으로 Member 5개를 생성하고 memberId를 print 했을 때 같은 결과가 나오는데 테스트를 잘못한 걸까요?삼항연산자를 사용해야하는 이유가 궁금합니다.
- 해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
(기초-3) 가위바위보 앱 만들기 / 코드 설정하기 - 2 (기초 앱 12강) 내 comChoice값의 자동 리셋
// // ViewController.swift // RPSGame // // Created by 윤동주 on 2023/08/23. // import UIKit class ViewController: UIViewController { @IBOutlet weak var mainLabel: UILabel! @IBOutlet weak var comImageView: UIImageView! @IBOutlet weak var myImageView: UIImageView! @IBOutlet weak var comChoiceLabel: UILabel! @IBOutlet weak var myChoiceLabel: UILabel! var comChoice:Rps = Rps(rawValue: Int.random(in: 0...2))! var myChoice:Rps = Rps.rock override func viewDidLoad() { super.viewDidLoad() comImageView.image = #imageLiteral(resourceName: "ready") myImageView.image = UIImage(named: "ready.png") comChoiceLabel.text = "준비" myChoiceLabel.text = "준비" } @IBAction func rpsButtonTabbed(_ sender: UIButton) { let title = sender.currentTitle! switch title { case "가위": myChoice = Rps.scissors case "바위": myChoice = Rps.rock case "보": myChoice = Rps.paper default: break } } @IBAction func selectButtonTabbed(_ sender: UIButton) { switch comChoice { case Rps.scissors: comImageView.image = UIImage(named: "scissors.png") comChoiceLabel.text = "가위" case Rps.rock: comImageView.image = UIImage(named: "rock.png") comChoiceLabel.text = "바위" case Rps.paper: comImageView.image = UIImage(named: "paper.png") comChoiceLabel.text = "보" } switch myChoice { case .scissors: myImageView.image = #imageLiteral(resourceName: "scissors") myChoiceLabel.text = "가위" case .rock: myImageView.image = #imageLiteral(resourceName: "rock") myChoiceLabel.text = "바위" case .paper: myImageView.image = #imageLiteral(resourceName: "paper") myChoiceLabel.text = "보" } if comChoice == myChoice { mainLabel.text = "비겼다." } else if comChoice == .rock && myChoice == .paper { mainLabel.text = "이겼다." } else if comChoice == .scissors && myChoice == .rock { mainLabel.text = "이겼다." } else if comChoice == .paper && myChoice == .scissors { mainLabel.text = "이겼다." } else { mainLabel.text = "졌다." } } @IBAction func resetButtonTabbed(_ sender: UIButton) { comImageView.image = #imageLiteral(resourceName: "ready") comChoiceLabel.text = "준비" myImageView.image = #imageLiteral(resourceName: "ready") myChoiceLabel.text = "준비" mainLabel.text = "선택하세요." // comChoice = Rps(rawValue: Int.random(in: 0...2))! } } 위와 같이 마지막에 comChoice에 대해 다시 random값 설정을 안해줘도 comChoice값이 새로 다시 랜덤값으로 변경이 됩니다. 이는 resetButtonTabbed에서 comImageView와 comChoiceLabel을 초기화하지 않았을 시에는 변경이 이뤄지지 않습니다. 이유가 무엇인지 궁금합니다.
- 미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용4 데이터이동과 화면전달 중 "직접세그웨이"관련문의
안녕하세요.화면이동 방법 중 직접 세그웨이 활용 시 세그웨이에 연결한 버튼을 IBAction 코드 작성필요 여부 문의입니다. 이유는 수업 참고파일 중 1.NextVC 2.BMI 파일에 다르게 구현되어있기 때문입니다.NextVC에서는 IBAction 코드가 미작성되어있고BMI파일에서는 "BMI계산하기"버튼에 대한 IBAction 코드가 작성되어있습니다.2번파일에서 prepare함수를 호출하기때문에 IBAction을 제외해도 되지 않나해서 돌려보니 에러가 납니다. 기초적인 질문일것같은데 답변 부탁드립니다. :)
- 미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
[65강] MemberListManager 질문있어요.
안녕하세요. MemberListManager 클래스를 ViewController에서 인스턴스를 생성하는 과정에서 의문점이 생겨 질문글을 남깁니다. 1️⃣강의 영상에서는 별도 makeMembersList() 메소드를 불러서 홍길동, 임꺽정 등 인물 정보를 불러오고 있습니다. 하지만, makeMemersList() 메소드가 아닌 별도 이니셜라이저를 정의해 인스턴스를 생성할 때 인물 정보를 불러오도록 시도하면 인물 정보가 두 번 불러와서(초기화되서) 제일 마지막 조커의 ID가 6이 아닌 13이 되네요.class ViewController: UIViewController { // 테이블 뷰 private let tableView = UITableView() // MARK: - 관리 모델 선언 // MVC패턴을 위한 데이터 매니저 (배열 관리 - 데이터) var membersListManager = MembersListManager() // 네비게이션 바에 넣기 위한 버튼 lazy var plusButton: UIBarButtonItem = { let button = UIBarButtonItem( barButtonSystemItem: .add, target: self, action: #selector(plusButtonPressed) ) return button }() // NOTE: - lazy 변수로 선언한 이유⭐️ // - plusButton을 일반적인 프로퍼티로 선언했다면, target으로 self를 사용할 때 초기화되지 않은 self를 참조하게 되어 오류가 발생할 수 있습니다. override func viewDidLoad() { super.viewDidLoad() setupNaviBar() setupTableView() setupTableViewConstraints() setupDatas() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // 뷰가 다시 나타날 때, 테이블 뷰 리로드 tableView.reloadData() }class MembersListManager { // 멤버리스트를 저장하기 위한 배열 private var membersList: [Member] = [] init() { membersList = [ Member(name: "홍길동", age: 20, phone: "010-1111-2222", address: "서울"), Member(name: "임꺽정", age: 23, phone: "010-2222-3333", address: "서울"), Member(name: "스티브", age: 50, phone: "010-1234-1234", address: "미국"), Member(name: "쿡", age: 30, phone: "010-7777-7777", address: "캘리포니아"), Member(name: "베조스", age: 50, phone: "010-2222-7777", address: "하와이"), Member(name: "배트맨", age: 40, phone: "010-3333-1234", address: "고담씨티"), Member(name: "조커", age: 40, phone: "010-4321-1234", address: "고담씨티") ] } // <...이하 생략...> 아래는 인스턴스의 생성 과정을 추적하기 위해 콘솔에 멤버 리스트를 출력한 결과입니다.0 - Optional("홍길동")1 - Optional("임꺽정")2 - Optional("스티브")3 - Optional("쿡")4 - Optional("베조스")5 - Optional("배트맨")6 - Optional("조커")7 - Optional("홍길동")8 - Optional("임꺽정")9 - Optional("스티브")10 - Optional("쿡")11 - Optional("베조스")12 - Optional("배트맨")13 - Optional("조커")테이블에는 6 ~ 13번까지 결과가 표시됩니다. ViewController에서는 분명 하나의 인스턴스만 생성했음에도, 왜 이런 결과가 출력되는 건가요? 2️⃣ 그리고 ViewController에서 plusButton 변수를 선언할 때, lazy 변수로 선언하는 이유가 무엇인가요? 대충 ViewController의 초기화 과정과 연관(ViewController 인스턴스가 만들어지기도 전에 self를 할당하면 nil로 대입?)되어 있다는 점만 알고 있는데, 정리가 안되서 그러는데 설명 부탁드려도 될까요?
- 미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
변수 저장 질문
변수에 값을 할당할때 두 단계를 나누지 않고 이미지처럼 userInput을 Int형으로 전환하고 바로 저장하지 않는 이유가 있을까요???
- 해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
[58강] 실제로 앱을 만들게 된다면
안녕하세요. 강의를 수강하다 문득 드는 궁금증이 뷰에 어떠한 설정(스타일)을 한다고 할 때, 1️⃣ 모든 설정을 코드로 설정을 건드리면 좋을지, 아니면 2️⃣Attribute Inspector로 설정을 건드리면 좋은지 고민이 들어 질문을 남기게 되었습니다. 예를 들어, UILabel의 폰트 크기를 바꾼다고 할 때, 1️⃣과 2️⃣ 방법 모두 사용할 수 있습니다. 이때, 강사님께서는 어느 방법을 더 선호하시는 편인가요?
- 미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용-3 앱 / 코드로 UI짜기 오류 질문입니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 로그인 화면 만드는 코드에서, 오토 레이아웃을 설정했습니다. 실행을 시키면 버튼이 나와야 하는데, Thread 1: "Unable to activate constraint with anchors <NSLayoutXAxisAnchor:0x60000039b680 \"UILabel:0x14f10d260.leading\"> and <NSLayoutXAxisAnchor:0x600000398a00 \"UIView:0x14f127660.leading\"> because they have no common ancestor. Does the constraint or its anchors reference items in different view hierarchies? That's illegal." 라는 오류가 발생합니다. 어떻게 해결하면 될까요?? NSLayout이 문제인 거 같아, 사용하지 않고 .isActive = true로 작성해서 실행시켜도 같은 오류가 발생합니다.
- 미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
(기초-3)가위바위보 앱 만들기 - 기초 앱 강의 12강 질문입니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.강의 코드를 모두 동일하게 작성을 했는데 comChoice의 값이 랜덤으로 바뀌지를 않는 거 같아요. myChoice는 select를 누를 때마다 변하는데, comChoice는 처음 값만 그대로 가고 변하지를 않습니다. 어떤 부분이 문제인가요?? // // ViewController.swift // RPSGame // // Created by Gahyun Kim on 2023/07/12. // import UIKit class ViewController: UIViewController { //변수 / 속성 @IBOutlet var mainLabel: UILabel! @IBOutlet var comImageView: UIImageView! @IBOutlet var myImageView: UIImageView! @IBOutlet var comChoiceLabel: UILabel! @IBOutlet var myChoiceLabel: UILabel! var myChoice = Rps(rawValue: Int.random(in: 0...2))! var comChoice = Rps(rawValue: Int.random(in: 0...2))! //함수 / 메서드 //앱의 화면에 들어오면 처음 실행되는 함수 override func viewDidLoad() { super.viewDidLoad() // 1) 첫번째/두번째 이미지뷰에 준비(묵) 이미지를 띄워야 함 comImageView.image = #imageLiteral(resourceName: "ready") myImageView.image = UIImage(named: "ready.png") // 2) 첫번째/두번째 레이블에 *준비*라고 문자열을 띄워야 함 comChoiceLabel.text = "준비" myChoiceLabel.text = "준비" } @IBAction func rpsButtonTapped(_ sender: UIButton) { // 가위/바위/보(enum)를 선택해서 그 정보를 저장해야함 //버튼의 문자를 가져옴 guard let title = sender.currentTitle else { return } print(title) switch title { case "가위" : myChoice = Rps.scissors case "바위" : myChoice = Rps.rock case "보" : myChoice = Rps.paper default : break } } @IBAction func selectButtonTapped(_ sender: UIButton) { // 1) 컴퓨터가 랜덤으로 선택한 것을 이미지뷰에 표시 // 2) 컴퓨터가 랜덤으로 선택한 것을 레이블에 문자열로 표시 switch comChoice { case Rps.rock : comImageView.image = #imageLiteral(resourceName: "rock") comChoiceLabel.text = "바위" case Rps.paper : comImageView.image = #imageLiteral(resourceName: "paper") comChoiceLabel.text = "보" case Rps.scissors : comImageView.image = #imageLiteral(resourceName: "scissors") comChoiceLabel.text = "가위" } // 3) 내가 선택한 것을 이미지뷰에 표시 // 4) 내가 선택한 것을 레이블에 문자열로 표시 switch myChoice { case Rps.rock : myImageView.image = #imageLiteral(resourceName: "rock") myChoiceLabel.text = "바위" case Rps.paper : myImageView.image = #imageLiteral(resourceName: "paper") myChoiceLabel.text = "보" case Rps.scissors : myImageView.image = #imageLiteral(resourceName: "scissors") myChoiceLabel.text = "가위" } // 5) 컴퓨터가 선택한 것과 내가 선택한 것을 비교해서 이겼는지/졌는지 판단해서 문자열로 표시 if comChoice == myChoice { mainLabel.text = "비겼다" } else if comChoice == .rock && myChoice == .paper { mainLabel.text = "이겼다" } else if comChoice == .paper && myChoice == .scissors { mainLabel.text = "이겼다" } else if comChoice == .scissors && myChoice == .rock { mainLabel.text = "이겼다" } else { mainLabel.text = "졌다" } } @IBAction func resetButtonTapped(_ sender: UIButton) { // 1) 컴퓨터가 다시 처음 준비 이미지뷰에 표시 // 2) 컴퓨터가 다시 준비 레이블에 문자열로 표시 comImageView.image = #imageLiteral(resourceName: "ready") comChoiceLabel.text = "준비" // 3) 내 선택 이미지뷰에도 준비 이미지를 표시 // 4) 내 선택 레이블에도 준비 문자열 표시 myImageView.image = #imageLiteral(resourceName: "ready") myChoiceLabel.text = "준비" // 5) 메인 레이블 *선택하세요* 표시 mainLabel.text = "선택하세요" // 6) 컴퓨터가 다시 랜덤 가위/바위/보를 선택하고 저장 comChoice = Rps(rawValue: Int.random(in: 0...2))! } }
- 미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
기초앱 12강 가위바위보 앱 viewDidLoad() 함수 내부 구현 질문
안녕하세요 강의 잘 듣고있습니다!!제가 가위바위보 앱을 강의 보면서 따라만들때는 이 오류가 안떴는데 혼자 복습하면서 만들다보니 viewDidLoad 함수 내부에서 comImageView.image = #imageLiteral( 준비 이미지를 설정하는데 빌드를 하면 오류가 뜹니다.오류는 : Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value라고 뜨는데 comImageView.image 에 준비 이미지를 넣어줬는데도 왜 옵셔널이라 뜨는거죠..? 원본 코드랑 비교해도 다른 점이 없고 구글링해도 안나와서 질문드립니다ㅠㅠ답변해주시면 감사하겠습니다!아래는 제 ViewController 화면입니다
- 미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
테이블뷰(커스텀델리게이트) - 2 (MVVM으로 바꾸기) (업데이트-13강) 질문
안녕하세요. 선생님 강의 잘 보고 있습니다.질문이 하나 있는데 MemberListViewModel에서 numberOfRowsInSection 메서드에 section은 왜 매개변수로 받는건가요..? 받은 section을 사용하진 않는거같은데..
- 미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용-8 앱 / 디테일화면 만들기
활용 8 강의를 보면서 MemberList App 을 만들고 있는데 강의와 동일하게 Member Model 에서 memberImage를 lazy var 로 선언했는데 위 사진처럼 오류가 발생하는 이유가 궁금합니다.
- 미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
Code Base로 따로 구현해봤는데 막히는 부분이 있어서 질문드려요
안녕하세요! 앨런님, 강의 정말 잘 듣고 있습니다. 좋은 강의 만들어주셔서 감사합니다.다름이 아니라 ToDo 앱 강의를 참고해서 제 방식대로 스토리보드 사용하지 않고 코드로 앱을 만들어보고 있는데요. 막히는 부분이 있어서 질문드립니다!하단에 있는 4개의 Button들을 동그랗게 하고 싶어서 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() colorButtons.forEach { button in button.clipsToBounds = true button.layer.cornerRadius = button.frame.width / 2 } } 이렇게 구현했지만 전혀 바뀌는게 없어서 button.frame.width 를 print해봤는데 0.0이 나오네요...이건 왜그러는걸까요?참고로 말씀드리면 4개의 버튼은 모두 UIStackView의 subView입니다!혹시나 스택뷰의 서브뷰라 그런것인가 해서 구글링을 해봤습니다!print(stackView.arrangedSubviews[0].frame) print(stackView.arrangedSubviews[1].frame)근데 이렇게 해봐도 똑같이 0.0이 나오더라구요,,, ㅠㅠㅠ 도저히 이해가 안돼서 질문드립니다.
- 미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
직전화면으로 돌아가는 기능 질문
안녕하세요 선생님 항상 강의 잘 보고 있습니다. 저 질문이 있는데 제가 예전에 선생님 강의에서 바로 직전화면으로 돌아가는걸 설명해주는 강의를 봤던 기억이 있는데 rootviewcontroller에서 -1 해서 직전화면으로 가는..? 이런 로직이었던거같은데 도저히 못찾겠어서.. 이런 질문 드려서 죄송하지만 혹시 그게 몇강인지 좀 알 수 있을까요..??
- 미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
검색어 넘어갈때 질문있어요.
안녕하세요 엘런,활용9를 코드 베이스로 구현 해봤는데띄어쓰기를 포함해서 검색하면 이런 에러가 나는데 이유가 궁금합니다... ! 제공해주신 파일에서도 그렇더라구요.