묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Objective-C 강좌 - 12개 앱 만들면서 배우는 iOS 아이폰 앱 개발
144번째 강의는 어디 있는건가요?
144번째 강의는 어디 있는건가요?진도율이 143강/144강(99.31%)에서 진행이 안됩니다.최종 143강까지가 마지막으로 확인됩니다. 수강완료할수 있게 확인 부탁드립니다
-
해결됨[Lv.1] 누구나 할 수 있는 - SwiftUI Basic with iOS 17
ExtractView, @Binding 강의에서 .previewLayout(.sizeThatFits) 함수 관련해서 질문드립니다.
안녕하세요 강사님. 현재 ExtractView, @Binding 강의들을 듣고 있는데전체레이아웃 사이즈를 조정해주는 .previewLayout(.sizeThatFits) 메서드가 프리뷰에서 적용이 안되는데 이것도 iOS 버전 문제일까요? 프리뷰 캔버스에서는 강의에서 나오는 메뉴가 따로 안보이고 해서 코드로만 입력을 했는데도 적용이 안되서 질문드립니다. 감사합니다.
-
미해결
스위프트를 통해 사진을 여러장 선택 후, 선택된 이미지를 어떻게 홤면에 표시하나요?
안녕하세요당근마켓에서 보면 저렇게 동그라미 버튼을 누르면 여러 장의 사진을 선택할 수 있고, 선택이 완료되면선택된 사진을 버튼 옆으로 보여주는데요 이걸 구현할 때 가장 왼쪽에 있는 버튼 하나 구현하고, 그 옆에 선택된 이미지는 컬렉션 뷰를 통해 보여주면 되나요? 제가 구현하려고 하는 방법은 가장 왼쪽은 UIButton으로 구현하고 BSImagePicker를 통해 여러 장의 이미지를 선택하고 선택한 이미지를 별도의 배열에 저장한 다음에 그 옆으로 컬렉션뷰를 구현하여 배열 내의 사진을 한 장씩 보여주는 방식으로 하려고 합니다.
-
미해결UIKit - iOS14 실무 가이드 <iOS앱 진짜 개발자 되기>
pageViewController 호출시점
강의에서 매개변수로 viewControllerBefore viewController 이나 viewControllerAfter viewController 를 가지고 있는 pageViewController함수를 이용해 현재 페이지의 idx 를 구할 수 있다고 들었는데, 언제 호출되는지 궁금해서 각각 함수에 아래의 디버깅 코드를 넣어서 테스트 해봤습니다print("before pageViewController 호출")print("after pageViewController 호출")결과는 오른쪽 페이지로 갈때는 after 이 출력되었고 왼쪽페이지로 갈때는 before 이 출력되었는데 매번 나오는건 아니고 나올때도 있고 안 나올때도 있더라고요..왜 이렇게 매번 호출이 되었다가 안되었다가 하는 것일까요?페이지에 따른 규칙성일까 싶어 확인해봤으나 랜덤으로 나왔다가 안 나왔다가 하는 것 같았습니다. extension OnBoardingPageViewController: UIPageViewControllerDataSource { func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { print("before pageViewController 호출") guard let currentIdx = pages.firstIndex(of: viewController) else { return nil } self.currentIdx = currentIdx //마지막 페이지일 경우 마지막 페이지로 if (currentIdx == 0 ) { return pages.last } return pages[currentIdx-1] } func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { print("after pageViewController 호출") guard let currentIdx = pages.firstIndex(of: viewController) else { return nil } self.currentIdx = currentIdx if currentIdx == pages.count - 1 { return pages.first } return pages[currentIdx + 1] } }
-
해결됨[Lv.1] 누구나 할 수 있는 - SwiftUI Basic with iOS 17
iOS 15 버전이후 프리뷰 문제 관련해서 질문드립니다.
안녕하세요 Jacob 강사님.좋은 강의 잘 듣고 있습니다. 현재 다른 질문에 답변해주신 글을 확인해서 iOS 15버전 업데이트 후 프리뷰 문제로 뷰를 추가하면 새로운 프리뷰가 생기지 않아서 새로운 클래스나 구조체를 만들고 프리뷰를 추가해줘야 한다고 들었는데요.그게 특정 강의에서만 해당되는게 아닌 지금 현재 강의들에서 프리뷰가 안생기는 문제들은 알려주신 방법대로 모두 진행하면 될까요? 현재 'LazyGrid' 강의 듣고 있고 Frame 강의때 프리뷰 문제를 발견해서 그 이후에 쭉 프리뷰가 나눠지는 부분은 알려주신 대로 처리했었습니다. 올바르게 하고 있는게 맞는지 궁금해서 질문드립니다. 감사합니다.
-
미해결Apple 출신 개발자의 SwiftUI Basic Part 1 기초튼튼
var body: some View는 기본적으로 Vstack인가요?
@state강의에서 Zstack밑에 Hstack을 넣는데 Vstack안에서 쌓는게아니라 단순히 Zstack과 Hstack이 위아래로 배치되는데아무것도 명시하지않을때는 기본적으로 Vstack처럼 동작하는지 궁금합니다
-
미해결최신 SwiftUI와 UIKit과 함께하는 올인원 iOS 앱 개발 강의
ListViewController이 뜨지 않습니다.
안녕하세요? 강의를 잘 듣고 있습니다. 파이어베이스 - 회원가입/로그인 3 ~ 데이타베이스 부분 을 진행하고있는데요 리스트 뷰 firestore 버튼을 누르면 ListViewController 이 나오지 않고 이런 오류가 뜹니다. (앱은 안꺼집니다) 이유가 뭘까요? 혹시 제가 놓친 부분이 있을까요?
-
미해결UIKit - iOS14 실무 가이드 <iOS앱 진짜 개발자 되기>
20:01 쯤에서
execute: ()-> void 에서 바로 {code}로 형태를 바꾸시던데 어떻게 하는건가요? 단축키가 따로 있나요?
-
미해결Flutter 중급 2편 - 실전 앱 개발 - 미국 주식 앱 (with 클린 아키텍처)
뷰모델 생성자로 리스트 불러오
class StoreViewModel with ChangeNotifier { String? regionName = ''; String barName = '지역별 서점'; bool isLoading = false; final StoreRepository repository; StoreViewModel(this.repository) { print('생성자호출'); _loadSimpleStores(); print(stores); } List<SimpleStore> stores = []; void onEvent(StoreEvent event, BuildContext context) { event.when(touchTile: (id) async { StoreInfo store = await repository.getStoreInfo(id); Navigator.push( context, MaterialPageRoute( builder: (context) => StoreDetailScreen(storeDetail: store)), ); }, searchStore: (query) async { }); } //지역 전체 Future<void> _loadSimpleStores() async { isLoading = true; notifyListeners(); stores = await repository.getStores(); isLoading = false; notifyListeners(); } } --------------------------------------------- class StoreViewScreen extends StatefulWidget { StoreViewScreen({ super.key, this.barName, this.regionName, }); String? barName; String? regionName; @override State<StoreViewScreen> createState() => _StoreViewScreenState(); } class _StoreViewScreenState extends State<StoreViewScreen> { TextEditingController _controller = TextEditingController(); @override Widget build(BuildContext context) { final customerInfoViewModel = context.watch<CustomerInfoViewModel>(); final storeViewModel = context.watch<StoreViewModel>(); return Scaffold( appBar: AppBar( centerTitle: true, title: Text( storeViewModel.barName, style: TextStyle( fontWeight: FontWeight.bold, ), ), leading: IconButton( onPressed: () { Navigator.pop(context); }, icon: Icon(Icons.close), ), ), body: Column(children: [ //입력창 + 검색창 Container( child: Row( children: [ Expanded( child: Container( decoration: BoxDecoration( border: Border.all(color: Colors.grey), // 테두리 색상 설정 borderRadius: BorderRadius.circular(8.0), // 테두리 둥글기 설정 ), child: TextField( controller: _controller, decoration: InputDecoration( hintText: '텍스트를 입력하세요.', // 힌트 텍스트 contentPadding: EdgeInsets.all(12.0), // 텍스트 입력 필드 내부의 여백 설정 border: InputBorder.none, // 기본 테두리 제거 ), ), ), ), TextButton(onPressed: () {}, child: Text('검색')) ], ), ), //지역 이름 or 내주변 Container( child: Row( children: [ Text( storeViewModel.regionName ?? '내 주변', style: TextStyle( fontSize: customerInfoViewModel.screenHeight / 20, fontWeight: FontWeight.bold), ), Text( '${storeViewModel.stores.length}가 검색 됨', style: TextStyle( fontSize: customerInfoViewModel.screenWidth / 20, fontWeight: FontWeight.bold), ), ], )), //서점 리스트 표시 Expanded( child: Container( child: !storeViewModel.isLoading ? ListView.builder( itemCount: storeViewModel.stores.length, itemBuilder: (BuildContext context, int index) { return GestureDetector( child: StoreSimpleInfo( id: storeViewModel.stores[index].id, profileUrl: storeViewModel.stores[index].imageUrl, storeName: storeViewModel.stores[index].name, storeAddr: storeViewModel.stores[index].address, category: storeViewModel.stores[index].category), onTap: () { storeViewModel.onEvent( StoreEvent.touchTile( storeViewModel.stores[index].id, ), context, ); }, ); }, ) : CircularProgressIndicator(), ), ), ]), ); } } 스크린을 열면 viewmodel 생성자로 리스트를 불러오고 싶은데 viewmodel 생성자가 작동을 안합니다 이유가 뭘까요 ㅠㅠ? 의존성주입 문제는 아닌것같아요
-
미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
예제 프로젝트 빌드 실패
예제 프로젝트를 실행할 수가 없습니다.애플 developer 계정을 반드시 만들어야 하나요? 아직 초보라서 좀 익숙해지면 하려고 했는데...
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
Api관련 질문있습니다!
안녕하세요. 강의를 수강하면서 프로젝트로 앱을 하나 만들어 보려고 합니다.우선 Node를 사용하여 서버를 만들었습니다.카카오 맵이나 구글 api를 요청받아 지도상에 출발지와 목적지 위치를 입력받고 이동경로를 표시하고자 하는데,문제는 api요청을 서버에서 하고 앱으로 전달할 지 아니면 앱에서 직접 api를 요청하여 바로 사용할 지 고민입니다. 후자의 경우 앱이 무거워질 수도 있는 게 아니냐는 백엔드 측의 의견이 나왔습니다.항상 강의 도움을 많이 받고 있습니다. 감사합니다.
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
RESTful API 질문있습니다!
안녕하세요 앨런님! 강의 잘 듣고 있습니다! 앨런님 강의 덕분에 IOS개발자로 면접을 보게되었는데 자격요건에 "Restful api 기반 앱 개발 경험이 있으신 분" 이라는 문장이 있는데 현재 제가 배운게 앨런님이 알려주신 섹션 14에 urlsession쪽에 내용만 알고 있습니다! 제가 다음주 수요일 면접에서 restful api에 대한 질문을 받으면 어떻게 대답을 해야지 올바른 답변이 될 수 있을까요? 어디서 부터 손을 대야할지 잘 모르겠어서 이렇게 질문 드리게 되었습니다 읽어주셔서 감사합니다 :) 일단 restful api에 대해서 구글링하면서 공부는 하고 있는데 , 딱히 뭐라고 답변을 드려야할지... 생각이 안나서.. 질문을 작성했씁니다 ㅠ 현재 제가 사용자 프로필을 위해 이미지를 urlsession을 통해 가져오고 있는데 이 코드들을 이용해서 답변을 할 수 있을지도 궁금합니다! var imageCache = [String: UIImage]() extension UIImageView { func loadImage(with urlString: String) { // 이미지가 캐쉬데이터로 존재하는지 확인하고 싶음, cache 키값을 넣어서 이제 벨류로 나오게 하는거임 if let cacheImage = imageCache[urlString] { self.image = cacheImage return } // 저는 // 이미지 위치 guard let url = URL(string: urlString) else { return } // url콘텐츠를 가져오기 , HTTP의 각종 메서드를 이용해 서버로부터 응답 데이터를 받아서 Data 객체를 가져오는 작업을 수행한다 URLSession.shared.dataTask(with: url) { data, response, error in //에러가 뜬 경우 if let error = error { print("이미지를 불러오지 못해서 에러", error.localizedDescription) } // 이미지 데이터를 만든경우 guard let imageData = data else { return } // 가져온 이미지를 통해 이미지 설정 let photoImage = UIImage(data: imageData) // 키 값이랑 이미지 캐시를 설정 , 키값은 이미지의 문자열 , 벨류는 당연히 이미지 사진이됨 imageCache[url.absoluteString] = photoImage // 이미지 설정 DispatchQueue.main.async { self.image = photoImage } }.resume() //일시중단된 작업을 재개해서 중단되면 다시 이미지가 로드될 수 있도록 }}
-
미해결Flutter 중급 1편 - 클린 아키텍처
freezed JsonKey 사용 예시 공유
import 'package:freezed_annotation/freezed_annotation.dart'; part 'photo.freezed.dart'; part 'photo.g.dart'; @freezed class Photo with _$Photo { factory Photo({ required int id, required String tags, @JsonKey(name: 'previewURL') required String previewUrl, }) = _Photo; factory Photo.fromJson(Map<String, dynamic> json) => _$PhotoFromJson(json); }
-
미해결Flutter 중급 1편 - 클린 아키텍처
아이폰에서 APP 실행 안되는 현상
안녕하세요.맥북에서 Android Studio와 아이폰간에 USB 케이블을 연결하여 앱 실행을 하면 아이폰에 Flutter APP 아이콘이 생깁니다.그리고 USB 케이블이 연결된 상태에서는 화면이 활성화되어 있을 때에는 앱 실행이 잘 됩니다.그런데 USB 케이블을 제거하고 APP을 실행하면 실행이 안됩니다.이 문제를 해결하려면 어떤 조치를 해야 할까요?
-
미해결성공적인 진짜 iOS Design Guide - [Autolayout With Code]
안녕하세요! 강의 자료 관련 문의 드립니다.
스택뷰 강의를 보고 있는데, 정렬과 배열 옵션에 대한 이미지들이강의에서 다운로드 받은 자료에서는 찾지 못했습니다.Autolayout_StackView_2023 프로젝트도 마찬가지였어요.혹시, 강의에서 보여주는 자료를 받을 수 있는 방법이 있을까요~?
-
미해결[iOS] Swift Modern Collection View & MVVM 패턴 가이드
MVVM 패턴 구현에서 rx binding관련 질문입니다.
안녕하세요 :) MVVM 패턴 구현 강의를 들으면서 질문이 생겼습니다.혹시 아래처럼 button들의 tap이벤트를 바로 바인딩하지 않고 중간에 subject를 트리거로 만들어 따로 연결하는 이유가 있을까요 ??rx.tap이 ControlEvent라서 ViewModel의 trigger와 바로 바인딩해줘도 괜찮을 것 같다는 생각이 들었습니다. let input = ViewModel.Input(tvTrigger: buttonView.tvButton.rx.tap.asObservable(), movieTrigger: buttonView.movieButton.rx.tap.asObservable())
-
미해결Stanford iOS 한글자막 강의
2024년 현재에도 적용이 되는 내용인지 궁금하네요
스플릿뷰컨 과 네비게이션 컨트롤러 연결하면 좀 다르게 되는 것 같은데.. 세그웨이 설정도 다르구요..
-
해결됨[Lv.2] 레벨업 - SwiftUI intermediate with Core Data
Combine 관련 질문드립니다.
안녕하세요. 강사님.현재 초급, 중급 강의 결제 후 아직 이전에 하던 공부가 마무리가 덜 되어서 강의를 시작하지는 않았는데요.이제 곧 마무리하고 SwiftUI 초급부터 들어가려고 하는데 Combine도 같이 배워야 좋다고 익히 들어서 Combine에 대해서도 같이 공부를 하려고 하는데 Combine에 대한 강의 업데이트 계획이 있으신가요? 있으시다면 언제쯤 업데이트 될 지도 궁금합니다!
-
미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
serial 큐 질문드립니다.
안녕하세요. 기본 구조는 A 스레드에서 SQ라는 serial queue에 async하게 task를 합니다.전달한 task의 마지막 부분에 @escaping 하는 completionHandler()를 호출하는 구조입니다. 만약 A 스레드에서 SQ에 task1, task2 두개를 보내면 completionHandler가 호출되는 순서는 보장받을 수 없는거죠? task1 { serialqueue.async { ...... completionHandler() } } task2 { serialqueue.async { ...... completionHandler() } }
-
미해결Flutter 중급 1편 - 클린 아키텍처
Provider
강의에서 이야기해주신 것 처럼 여러개의 Provider를 사용하기위해 MultiProvider를 사용하게되는데요. 이럴 때 일부 Provider가 일부 자식위젯에서만 사용될 경우해당 자식 위젯에서만 선언하는 것과 최상위에 MultiProvider내에 전부 선언해서 사용하는 것 중 어떤 것을 선호하시나요?그리고 왜 그런지 알 수 있을까요?