묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
searchable이 화면 하단에 위치해요
searchable이 화면 하단에 위치해요. 어떻게 하면 상단으로 이동시킬수가 있을까요?
-
미해결Flutter 고급 - 현업 수준의 아키텍처
현재강의 완성된코드가있을까요?
현재 강의 완성된코드를 찾아보았는데 보이지않아 Q&A 질문 올립니다
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
Drawing Cycle 관련 질문
안녕하세요, 강의 늘 잘 듣고 있습니다.다름이 아니라, 뷰의 레이아웃을 잡아주는 과정에서 Drawing Cycle & 생성자 중 어디에 무엇을 작성해야 할지 헷갈려서 개인적으로 알아보던 중 궁금증이 생겨서 질문드립니다! Drawing Cycle에 맞추어 뷰 업데이트하는 몇가지 예시init(생성자)subview 추가 (addSubview, stackView.addArrangedSubview)제약 생성 + NSLayoutConstraint.activate (1회)정적인 스타일(폰트, 색, axis, spacing 등)즉, ‘한번 바뀌고 안 바뀔 것들’을 세팅해 준다.updateConstraints()상태에 따라 레이아웃이 바뀔 때 (expanded/collapsed, 이미지 크기 토글, padding 변경, 어떤 뷰 숨김에 따른 높이 변경)constraint를 프로퍼티로 보관해두고updateConstraints()에서 constant 바꾸거나 isActive 토글필요 시 setNeedsUpdateConstraints() 호출즉, ‘동적으로 바뀔 레이아웃’을 세팅해 준다.layoutSubviews()frame이 계산된 뒤의 후처리를 수행해줘야 할 때 (그림자 경로, cornerRadius 등 frame의 정보가 필요한 것들) 먼저 제가 정리한 바는 다음과 같습니다.그런데, constraint를 updateConstraint() Drawing Cycle 내에서 지정해주는 강의 내 파트와 살짝 충돌이 발생하더라구요.GPT 및 개인적인 공부를 통해 확인했을 때에는,'constraint가 여러번 중복 적용될 수도 있으므로, 동적으로 constraint를 변경할 상황이 아니라면 생성자에서 초기화해주는 것이 좋다'라고 이해했습니다.동적으로 변경되지 않는 기본 레이아웃 제약은 생성자에서 설정하는 것이 원칙적으로 더 적절한지, 아니면 updateConstraints()에서 설정하는 방식도 올바른 패턴인지 궁금합니다.어떤 방식이 더 권장되는지 명확히 알고 싶습니다..!
-
해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
앱 제작 시 주로 코드로 작성하시는 이유가 있을까요?
안녕하세요, 해당 강의 18:00분 경에 앨런님께서 말씀하신 '앱을 만들 때 주로 코드로 만든다'라는 말씀에 궁금증이 들어 질문 남깁니다.UIKit을 통해 앱을 제작하실 때, 스토리보드 대신 주로 이전 강의 섹션과 같이 주로 코드를 이용해 UI를 구성한다는 말씀이신가요?스토리보드와 코드 둘 다 짧게나마 겪어본 제 입장에서는, 세그웨이를 수행하는 것 제외 스토리보드가 더욱 많은 이점이 느껴져서요.대표적으로는 VC에 UI 관련한 코드가 없어 더욱 VC가 본인의 책임에 집중하게 된다는 생각도 들고, 코드로 UI를 짜다 보면 하나 둘 빼먹게 될 확률도 높아지는 것 같아서요(스토리보드에서는 이를 바로 에러로 잡아주지만, 코드는 잡아주지 않기도 하구요)어떤 부분에 의해, 주로 코드로 UI를 구성하는 것을 선호하는지가 궁금합니다!
-
해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
델리게이트 패턴 관련 질문
영상 초반부(00:30 - 04:00)에 대한 의문점이 생겨 질문 남깁니다!텍스트필드의 경우 VC(뷰컨트롤러)와 '완전히 분리된 객체'이며 유저와 직접적인 커뮤니케이션을 하고, 버튼의 경우 VC와 '직접적인 커뮤니케이션을 한다' 라고 하셨는데, 이 부분에서 살짝 의문이 듭니다.텍스트필드와 버튼의 차이가 동작의 형태나 이벤트 흐름의 복잡성에서 발생한다는 점에는 공감하지만, 버튼 역시 UITextField와 마찬가지로 VC와는 별도의 객체로 존재하고, 이벤트 발생 시 target–action 메커니즘을 통해 결과를 VC로 전달하는 구조로 이해하고 있습니다.이런 관점에서 봤을 때, “버튼은 VC와 직접 커뮤니케이션한다”는 표현이 개념적으로 어떤 의미를 가지는지 조금 더 설명을 부탁드려도 될까요?
-
해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
수강 기간 연장 부탁드릴 수 있을까요?
구매 후에 늦게나마 시작해서 기간이 얼마 안남았네요ㅠ혹시 기간 연장이 가능할까요?
-
해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용 앱 57강 질문입니다.
영상 1분경에 보면드래그해서 폴더랑 파일 순서 변경하시는데 저는 현재 xcode 26.2 버전 사용하고있는데요.최신버전에서는 폴더, 파일순서 변경이 안되는건가요?
-
해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용 앱 30강 에러 질문입니다
let backButton: UIButton = { let button = UIButton(type: .custom) button.setTitle("Back", for: .normal) button.setTitleColor(.white, for: .normal) button.backgroundColor = UIColor.blue button.titleLabel?.font = .boldSystemFont(ofSize: 20) button.addTarget(self, action: #selector(backButtonTapped), for: .touchUpInside) return button }()backButton 설정시에 addTarget 첫번째 인자로 self 로 전달하니까 'self' refers to the method 'FirstViewController.self', which may be unexpected라는 warning 문구가 xcode 내에 표시되어서 xcode 에서 추천하는 방향대로 아래 코드블록 처럼 FirstViewController.self 로 전달하니까 backButton 클릭시 Exception 이 발생하는데요. button.addTarget(FirstViewController.self, action: #selector(backButtonTapped), for: .touchUpInside) 이 부분 왜 Excpetion 이 발생하는건지 궁금합니다.self 로 전달하면 문제는 없는데 경고문구가 나오는게 신경쓰입니다.경고문구를 없애고 버튼 클릭에도 문제가 없으려면 어떻게 하는게 좋을까요?Exception 문구는 아래와 같습니다.*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NextVC.FirstViewController backButtonTapped]: unrecognized selector sent to class 0x100e4a3d8'*** First throw call stack:(0x19df92964 0x19ae81814 0x19e02d140 0x19df1235c 0x19df1a200 0x1a4c49f58 0x1a4501154 0x1a4501498 0x1a44fdf08 0x1a450001c 0x1a4c7a2d4 0x1a4c7b734 0x1a4c5e170 0x1a3892d38 0x1a38a1e28 0x1a3894c50 0x1a38a2ee4 0x1a38a2374 0x28cd15560 0x19dee34cc 0x19df130b0 0x19df12fd8 0x19deeac1c 0x19dee9a6c 0x23fb18498 0x1a38c2df8 0x1a386be54 0x1a3997820 0x100e365cc 0x100e3653c 0x100e36648 0x19aed6e28)libc++abi: terminating due to uncaught exception of type NSException
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
기초앱 17강 Contraints 설정 질문입니다.
6:09 쯤에 UIView 에 대해서 Add New Contraints 하실때따라해보면 Top alignment 가 맞지않는게 좀 다르게 설정이 되는것 같습니다.Inspector 패널에서 확인해보면Top Alignment Constraint 가First Item : View.topSecond Item : Safe Area.top이런식으로 적용되고있는데요.이부분 설정을 어떻게해야 강의에 나오는것 처럼 수직정렬이 반듯하게 적용이 되는걸까요?
-
미해결Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
warning 하나가 있는 것 같습니다. 해결방법좀 알려주세요
iOS26 환경에서 코드 작성하면 아래와 같이 warning이 발생합니다.동작상에는 문제가 없지만, 동일하게 다른 파일에서도 사용되는 함수 인데 왜 발생되는 건지 이해가 안됩니다.확인 부탁드립니다. <ProfileEditingView>28,29라인에 KFImage(url)에서 발생됩니다."import Kingfisher"도 정의 되어있고, 다른 파일에서 "KFImage()"함수에서는 warning이 발생되지 않습니다. 혹시 Kingfisher 패키지 버전때문일까요? 강제로 10.4.xx으로 하긴 했지만, 몇몇 하위 패키지는 업데이트 된것 같습니다. warning 내용>Call to main actor-isolated initializer 'init(_:)' in a synchronous nonisolated context package 버전정보>{ "originHash" : "dacfd17cdf8fa9f962991925a9162eb62e278dab4974c56cd997ab2b87892aa5", "pins" : [ { "identity" : "abseil-cpp-binary", "kind" : "remoteSourceControl", "location" : "https://github.com/google/abseil-cpp-binary.git", "state" : { "revision" : "194a6706acbd25e4ef639bcaddea16e8758a3e27", "version" : "1.2024011602.0" } }, { "identity" : "app-check", "kind" : "remoteSourceControl", "location" : "https://github.com/google/app-check.git", "state" : { "revision" : "3b62f154d00019ae29a71e9738800bb6f18b236d", "version" : "10.19.2" } }, { "identity" : "firebase-ios-sdk", "kind" : "remoteSourceControl", "location" : "https://github.com/firebase/firebase-ios-sdk", "state" : { "revision" : "eca84fd638116dd6adb633b5a3f31cc7befcbb7d", "version" : "10.29.0" } }, { "identity" : "googleappmeasurement", "kind" : "remoteSourceControl", "location" : "https://github.com/google/GoogleAppMeasurement.git", "state" : { "revision" : "fe727587518729046fc1465625b9afd80b5ab361", "version" : "10.28.0" } }, { "identity" : "googledatatransport", "kind" : "remoteSourceControl", "location" : "https://github.com/google/GoogleDataTransport.git", "state" : { "revision" : "a637d318ae7ae246b02d7305121275bc75ed5565", "version" : "9.4.0" } }, { "identity" : "googleutilities", "kind" : "remoteSourceControl", "location" : "https://github.com/google/GoogleUtilities.git", "state" : { "revision" : "57a1d307f42df690fdef2637f3e5b776da02aad6", "version" : "7.13.3" } }, { "identity" : "grpc-binary", "kind" : "remoteSourceControl", "location" : "https://github.com/google/grpc-binary.git", "state" : { "revision" : "e9fad491d0673bdda7063a0341fb6b47a30c5359", "version" : "1.62.2" } }, { "identity" : "gtm-session-fetcher", "kind" : "remoteSourceControl", "location" : "https://github.com/google/gtm-session-fetcher.git", "state" : { "revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b", "version" : "3.5.0" } }, { "identity" : "interop-ios-for-google-sdks", "kind" : "remoteSourceControl", "location" : "https://github.com/google/interop-ios-for-google-sdks.git", "state" : { "revision" : "2d12673670417654f08f5f90fdd62926dc3a2648", "version" : "100.0.0" } }, { "identity" : "kingfisher", "kind" : "remoteSourceControl", "location" : "https://github.com/onevcat/Kingfisher", "state" : { "revision" : "dd3c422ec3088404d6f7e8c905a8318b3de12d6f", "version" : "8.6.0" } }, { "identity" : "leveldb", "kind" : "remoteSourceControl", "location" : "https://github.com/firebase/leveldb.git", "state" : { "revision" : "a0bc79961d7be727d258d33d5a6b2f1023270ba1", "version" : "1.22.5" } }, { "identity" : "nanopb", "kind" : "remoteSourceControl", "location" : "https://github.com/firebase/nanopb.git", "state" : { "revision" : "b7e1104502eca3a213b46303391ca4d3bc8ddec1", "version" : "2.30910.0" } }, { "identity" : "promises", "kind" : "remoteSourceControl", "location" : "https://github.com/google/promises.git", "state" : { "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", "version" : "2.4.0" } }, { "identity" : "swift-protobuf", "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-protobuf.git", "state" : { "revision" : "2547102afd04fe49f1b286090f13ebce07284980", "version" : "1.31.1" } } ], "version" : 3}
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
설계 관련하여 참고할 문서나 예제 공유가 가능할까요?
안녕하세요성공적으로 완강 했습니다.진짜 왕초보 iOS 배우기 부터 듣기 시작해서 이번이 두번째 강의를 완료하였고,직접 앱을 만드니 자신감도 생겨서, 추가적인 학습도 해보려고, property wrapper, combine도 구매완료하였는데..잠시 의문이 생겨서 질문드려 봅니다. 지금까지는 강의를 들으면서 뷰간의 순서와 설계에 대해 고민 없이 강의듣고 따라 해왔는데, 직접 뭔가를 구상하고 설계를 하려고 하니 다시 뭔가 벽에 부딪히는 느낌이 드네요.혹시 설계를 하기위해 구상하거나 문서를 가볍게라도 작성해서 고민을 해보고 싶습니다.좋은 방법이나 참고할만한 예제가 있을지 문의 드립니다. 강의 중간 설명해 주시려고 만드신 문서도 있으시던데..그런 자료도 공유가 가능하신지요?
-
미해결Flutter 고급 - 현업 수준의 아키텍처
dataclass 오류
dataclass build 하면 아래 오류가 항상 발생하네요어떤 이유일까요?// Recipe model class import 'package:receipt/domain/model/recipe_ingredient.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; part 'recipe.freezed.dart'; part 'recipe.g.dart'; @freezed class Recipe with $Recipe { const factory Recipe({ required String category, required int id, required String name, required String image, required String chef, required String time, required double rating, required List<RecipeIngredient> ingredients, @Default(false) bool isFavorite, }) = Recipe; factory Recipe.fromJson(Map<String, Object?> json) => _$RecipeFromJson(json); } --> 오류 Missing concrete implementations of 'getter mixin $Recipe on Object. category', 'getter mixin $Recipe on Object. chef', 'getter mixin $Recipe on Object. id', 'getter mixin $Recipe on Object. image', and 6 more. (Documentation) --> get 생성 시 오류 사라짐@override // TODO: implement category String get category => throw UnimplementedError(); @override // TODO: implement chef String get chef => throw UnimplementedError(); @override // TODO: implement id int get id => throw UnimplementedError(); @override // TODO: implement image String get image => throw UnimplementedError(); @override // TODO: implement ingredients List<RecipeIngredient> get ingredients => throw UnimplementedError(); @override // TODO: implement isFavorite bool get isFavorite => throw UnimplementedError(); @override // TODO: implement name String get name => throw UnimplementedError(); @override // TODO: implement rating double get rating => throw UnimplementedError(); @override // TODO: implement time String get time => throw UnimplementedError(); @override Map<String, dynamic> toJson() { // TODO: implement toJson throw UnimplementedError(); }
-
미해결C# WPF .NET Core(7.0)
강의 기간 연장이 가능할까요?
안녕하세요 강사님! 좋은 강의 감사드립니다.업무랑 여러 상황들 때문에 강의를 못듣고 있다가 어느새 강의 종료일이 다가오고 있는데 혹시 강의 연장이 가능할지요 ㅠㅠ?
-
해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
기초 앱 4강 Type Any -> UIButton
뒤에 설명이 나오는지는 아직 모르겠는데 수강자 분들 참고하시라고 적어놓습니다... 강의에서 @IBAction 함수 선언할 때 sender Type 을 Any 에서 UIButton 으로 변경하는데 그 이유가 이건 sender 의 타입이 UIButton 이라는 걸 명확하게 하는 거라고 보면 되고 Any 로 놔두면 나중에 sender 를 써야할 때는 타입캐스팅을 해야 사용이 가능합니다. [UIButton] 인 경우 sender.backgroundColor = ... [Any] 인 경우if let myButton = sender as? UIButton {sender.backgroundColor }
-
미해결Flutter 고급 - 현업 수준의 아키텍처
수업 노트에 있는 json 파일에 ingredient 관련 내용이 없습니다.
12 모델 클래스 시청중입니다.Ingredient 관련 json 내용 없습니다.강의 영상에 있는 내용과 다릅니다.
-
미해결Flutter 고급 - 현업 수준의 아키텍처
개발자 도구
플러터로 개발한 경우, 개발자도구로 cookie, local storage, sesstion storage에 데이터들을 보지 못하는게 맞는 건가요??혹시 그렇다면 어떻게 확인해야 할까요?
-
미해결WPF (.NET Core, C#, 자막제공)
page와 windows 사용구분
언제 page를 쓰고 언제 window를 쓰나요?
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
'loadAllPosts' 를 매번 사용해야 하나요?
안녕하세요 특정 코드에 대한 질문이 아니라 코드 설계에 대해 궁금한 점이 있습니다. 해당 프로젝트에서는 FeedView를 방문할 때 마다 'loadAllPosts'를 통해서 데이터를 가져오는데 이렇게 하면 비용적인 측면에서 문제가 되지 않을까요? 현업에서도 매번 이렇게 Read를 하는지 아니면 Cache를 사용하는지 궁금합니다.
-
해결됨Flutter 고급 - 현업 수준의 아키텍처
figma
안녕하세요.사진처럼 강사님은 figma에서 빨간색으로 위 38, 아래 45 떨어져있는지 나오는데요저는 나오지 않더라구요별도의 단축키가 있는걸까요??
-
해결됨Flutter 고급 - 현업 수준의 아키텍처
개발자도구
안녕하세요만일, padding을 설정했는데 실제로 패딩이 잘 들어갔는지 수치로 확인하고 싶을때, web은개발자도구에서 확인하는데요.시뮬레이터나 에뮬레이터는 불가능한걸까요??제가 chrome으로 빌드해서 보니까 나오지는 않더라구요 크롬역시 나오지 않더라구요 flutter는 원래 이런걸까요?