야곰의 iOS 프로그래밍
야곰의 iOS 프로그래밍
수강정보
(26개의 수강평)
371명의 수강생
스킬태그 #iOS, #Swift
55,000원
지식공유자 : yagom
106회 수업 · 총 10시간 34분 수업
기간 : 평생 무제한 시청
수료증 : 발급 강의
수강 난이도 : 초급
기록태리의 프로필

5번째 프로젝트 질문입니다 기록태리의 2달 전
5번째 프로젝트에서요 다른 코드는 괜찮은데, mainViewController에서 오류가 있습니다. 마지막 부분 decode인데요. "Cannot invoke 'decode' with an argument list of type '(@escaping (main.ButtonTag) -> AnimalInfo?, from: Data)'" 이러한 말이 뜹니다. 어떻게 해결해야하나요? //  main.swift//  What's This?////  Created by Tae-hee on 2020-05-11.//  Copyright © 2020 Tae-hee. All rights reserved.//import UIKitclass main: UIViewController {        //MARK: - Nested Type    private enum ButtonTag: Int {        case dog = 101        case cat, rabbit, hedgehog    }    // MARK: - Navigation    // In a storyboard-based application, you will often want to do a little preparation before navigation    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {        // Get the new view controller using segue.destination.        // Pass the selected object to the new view controller.        guard let button: UIButton = sender as? UIButton else { return }                    guard let nextViewController: game = segue.destination as? game else                {return}                    guard let tag: ButtonTag = ButtonTag(rawValue: button.tag) else {            print("버트의 태그를 enum 변경불가")            return        }                    guard let info: AnimalInfo = self.AnimalInfo(for: tag) else { return }                    nextViewController.AnimalInfo = info        }           //MARK: Privates   private func AnimalInfo(for tag: ButtonTag) -> AnimalInfo? {              let assetName: String              switch tag {       case ButtonTag.dog:           assetName = "Dog"       case ButtonTag.cat:           assetName = "Cat"       case ButtonTag.rabbit:           assetName = "Rabbit"       case ButtonTag.hedgehog:           assetName = "Hedgehog"       }           return self.decodeAnimalInfo(from: assetName)   }       private func decodeAnimalInfo(from assetName: String) -> AnimalInfo? {        guard let asset: NSDataAsset = NSDataAsset(name: assetName) else {            print("에셋 로드 실패")            return nil        }                do {            let decoder: PropertyListDecoder = PropertyListDecoder()            return try decoder.decode(AnimalInfo.self, from: asset.data)        } catch {            print("데이터 디코딩 실패")            print(error.localizedDescription)            return nil        }    }}

0
기록태리의 프로필

섹션1 웹브라우저 기록태리의 3달 전
강의에서는 오른쪽 맨 하단 key commands에 아이템들이 뜨는데요 제 x-code에서는 key commands 아래가 빈칸이고 아무것도 안떠서요 아이템들은 어떻게 띄우나요?

0
주효진 프로필

1번 프로젝트: 웹 브라우저 관련 질문 드립니다! 주효진 3달 전
먼저 야곰님 수업 정말 잘 듣고 있습니다 :) 야곰님 iOS 프로그래밍 강좌를 들으면서 따라하는 식으로 진행하다가 뒤로 갈수록 따라가는 것이 버거워져, 정리할 겸 1장으로 돌아와 복습을 하고 있었습니다. 한 2주 정도 전에 1장을 따라할 때에는 오류 없이 잘 실행되던 코드가 AppDelegate.swift 파일에서 오류가 납니다. 오류의 내용으로는 아래와 같이 발생합니다. Thread 1: Exception: "Could not instantiate class named WKWebView because no class named WKWebView was found; the class needs to be defined in source code or linked in from a library (ensure the class is part of the correct target)" 그런데 WKWebView는 ViewController에서 extension을 통해 상속받아주었는데 왜 AppDelegate 파일에서 저런 오류가 나는 지 모르겠습니다..

0
KHP 프로필

Xcode 11을 사용중이면, 해당 강의와 다른 부분이 많네요ㅠㅠ KHP 5달 전
예를들어 프로젝트 생성시 SwiftUI를 선택하면, ViewController.swift 파일이 생성되지 않더라구요. 또한 다른 부분도 많이 다르구요.. 이런 경우 xcode를 다운그레이드하면 되나요?  구버전의 ViewController이, 11버전에서는 어떤 것으로 바뀌었는지에 대한 정보가 있으면 좋겠네요..

0
FishinGom 프로필

"NSURLErrorDomain error -999." 오류 문의 FishinGom 5달 전
예제 실행 후 뒤로가기, 새로고침, 앞으로 버튼 클릭 시  "NSURLErrorDomain error -999." 오류 팝업이 출력됩니다. 페이지 로드가 완료되지 않은 상태에서 작업 요청 시 발생하는 오류라고 하는 것 같은데요. 이 오류가 발생하지 않도록 하려면 어떻게 해야 하나요? xcode 11.3 사용 중입니다 ---  추가로, 예제 실행 시 마지막 URL 정보가 유지되지 않는 것 같습니다. applicationWillResignActive 가 호출되지 않고 있는 건 아닌가 의심되는데요. 혹시 applicationWillResignActive 호출을 위해 따로 설정해야 하는 것이 있나요?

1
H J 프로필

Thread 1: signal SIGABRT 가 자꾸 뜨네요 천천히 차근차근 했는데... H J 11달 전
뷰 컨트롤에서  import UIKit import WebKit class ViewController: UIViewController {     // MARK: - Preperties     // MARK: IBOutlets     @IBOutlet var webView: WKWebView!     @IBOutlet var activityIndicator: UIActivityIndicatorView!          // MRAK: - Methods     // MARK: Life Cycle     override func viewDidLoad() {         super.viewDidLoad()         // Do any additional setup after loading the view.         self.webView.navigationDelegate = self     }          override func viewDidAppear(_ animated: Bool) {         super.viewDidAppear(animated)                  let firstPageURL: URL?                  if let lastURL: URL = UserDefaults.standard.url(forKey: lastPageURLDefualtkey) {             firstPageURL = lastURL         } else {             firstPageURL = URL(string: "https://www.google.com")         }                  guard let pageURL: URL = firstPageURL else {             return         }                  let urlRequest: URLRequest = URLRequest(url: pageURL)         self.webView.load(urlRequest)     }     // MARK: IBAction     @IBAction func goBeck(_ sender: UIBarButtonItem) {         self.webView.goBack()     }          @IBAction func goForward(_ sender: UIBarButtonItem) {         self.webView.goForward()     }     @IBAction func refresh(_ sender: UIBarButtonItem) {         self.webView.reload()     }          //MARK: Custom Methods     func showNetworkingIndicators() {         self.activityIndicator.isHidden = false         self.activityIndicator.startAnimating()         UIApplication.shared.isNetworkActivityIndicatorVisible = true     }          func hideNetworkingIndicators() {         self.activityIndicator.isHidden = true         self.activityIndicator.stopAnimating()         UIApplication.shared.isNetworkActivityIndicatorVisible = false     } } extension ViewController: WKNavigationDelegate {          //MARK: WKNavigationDelegate     func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {         print("did finish navigation")                  if let appDelegate: AppDelegate = UIApplication.shared.delegate as? AppDelegate {             appDelegate.lastPageURL = webView.url         }         webView.evaluateJavaScript("document.title") { (value: Any?, error: Error?) in             if let error: Error = error {                 print(error.localizedDescription)                 return             }                          guard let title: String = value as? String else {                 return             }                          self.navigationItem.title = title         }         self.hideNetworkingIndicators()     }          func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {         print("did fail navigation")         print("\(error.localizedDescription)")                  self.hideNetworkingIndicators()         let message: String = "오류발생!\n" + error.localizedDescription                  let alert: UIAlertController         alert = UIAlertController(title: "알림", message: message, preferredStyle: UIAlertController.Style.alert)                  let okayAction: UIAlertAction         okayAction = UIAlertAction(title: "확인", style: UIAlertAction.Style.cancel, handler: nil)                  alert.addAction(okayAction)                  self.present(alert, animated: true, completion: nil)     }          func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {         print("did start navigation")         self.showNetworkingIndicators()     } } 앱딜리게이트에서  import UIKit /// 마지막 페이지 주소를 UserDefaults에서 관리하기 귀한 키 값 let lastPageURLDefualtkey: String = "lastURL" @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate {          // MARK: - Properties     var window: UIWindow?     var lastPageURL: URL?               // MRAK: - Methods     func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {         // Override point for customization after application launch.                  self.lastPageURL = UserDefaults.standard.url(forKey: lastPageURLDefualtkey)         return true     }     func applicationWillResignActive(_ application: UIApplication) {         // 응용 프로그램이 활성 상태에서 비활성 상태로 이동하려고 할 때 전송됩니다. 이는 특정 유형의 일시적인 중단 (예 : 전화 또는 SMS 메시지 수신) 또는 사용자가 응용 프로그램을 종료하고 백그라운드 상태로 전환하기 시작할 때 발생할 수 있습니다.         //이 방법을 사용하여 진행중인 작업을 일시 중지하고 타이머를 비활성화하고 그래픽 렌더링 콜백을 무효화합니다. 게임은이 방법을 사용하여 게임을 일시 중지해야합니다.         let userDefaults: UserDefaults         userDefaults = UserDefaults.standard                  userDefaults.set(self.lastPageURL, forKey: lastPageURLDefualtkey)         userDefaults.synchronize()     }  코드를 적었는데요  빌드를 실행하게 되면 앱딜리게이트 첫부분  class AppDelegate: UIResponder, UIApplicationDelegate {Thread 1: signal SIGABRT  A가 걸리네요  레이아웃 연결 제대로 연결했는데 스레드 걸리니깐 무엇이 문제인지 모르겠습니다... 

0
shhan730@gmail.com 프로필

UI WebView deprecated shhan730@gmail.com 11달 전
UI WebView는 IOS 12.0부터 deprecated 되었답니다. 화면도 검정색만 뜨네요 어떡하죠?  

1
shhan730@gmail.com 프로필

강의 코드 shhan730@gmail.com 11달 전
Yagom님 깃헙 레포에 가보아도 강의때 작성하신 코드를 찾을 수 없는데 혹시 강의코드는 공유하지 않으시는 건가요?

0
박단비 프로필

혹시 강의하실때 사용하셨던 Xcode 버전을 알 수 있을까요? 박단비 2019.07.03
모두 똑같이 적었는데 오류가 많이 납니다 ㅠㅠ 저는 10.2.1 사용합니다.

4
Matthew So 프로필

질문 드립니다( keychain)관련 Matthew So 2019.05.06
안녕하세요 강사님. 좋은 강좌 감사합니다. 강좌와는 별개로 첫 개인 프로젝트 진행 중인데, 사용자의 각종 개인 정보를 보관하기 위해서는 어떤 api나 framework가 적절할 지 조언해 주시면 감사 드리겠습니다. 찾아보기로는 user default와 keychain을 보통 사용하더라고요. 감사합니다!

1
include hoany 프로필

Thread 1: signal SIGABRT 오류발생 입니다. include hoany 2019.04.30
꼼꼼하게 코드를 전부 확인했으나 이상이 없어서 혹시나 해서 야곰님이 올려두신 코드를  복사해서 컴파일 해보았으나   다음과 같은 오류가 발생했습니다. 웹킷 객체를 구성하지 못한것 같은데 이유를 모르겠네요..   2019-04-30 01:14:12.255645+0900 MyWebBrowser[14759:376648] *** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named WKWebView because no class named WKWebView was found; the class needs to be defined in source code or linked in from a library (ensure the class is part of the correct target)'*** First throw call stack:(    0   CoreFoundation                      0x000000010d9d06fb __exceptionPreprocess + 331    1   libobjc.A.dylib                     0x000000010cf74ac5 objc_exception_throw + 48    2   CoreFoundation                      0x000000010d9d0555 +[NSException raise:format:] + 197    3   UIFoundation                        0x0000000116dfb6c9 UINibDecoderDecodeObjectForValue + 360    4   UIFoundation                        0x0000000116dfbaf9 UINibDecoderDecodeObjectForValue + 1432    5   UIFoundation                        0x0000000116dfb554 -[UINibDecoder decodeObjectForKey:] + 251    6   UIKitCore                           0x00000001116ed705 -[UIView initWithCoder:] + 802    7   UIFoundation                        0x0000000116dfb852 UINibDecoderDecodeObjectForValue + 753    8   UIFoundation                        0x0000000116dfb554 -[UINibDecoder decodeObjectForKey:] + 251    9   UIKitCore                           0x0000000110ed2b41 -[UIRuntimeConnection initWithCoder:] + 178    10  UIFoundation                        0x0000000116dfb852 UINibDecoderDecodeObjectForValue + 753    11  UIFoundation                        0x0000000116dfbaf9 UINibDecoderDecodeObjectForValue + 1432    12  UIFoundation                        0x0000000116dfb554 -[UINibDecoder decodeObjectForKey:] + 251    13  UIKitCore                           0x0000000110ed03f1 -[UINib instantiateWithOwner:options:] + 1216    14  UIKitCore                           0x0000000110c4d3af -[UIViewController _loadViewFromNibNamed:bundle:] + 382    15  UIKitCore                           0x0000000110c4dd39 -[UIViewController loadView] + 177    16  UIKitCore                           0x0000000110c4e048 -[UIViewController loadViewIfRequired] + 172    17  UIKitCore                           0x0000000110bb2004 -[UINavigationController _updateScrollViewFromViewController:toViewController:] + 68    18  UIKitCore                           0x0000000110bb22f7 -[UINavigationController _startTransition:fromViewController:toViewController:] + 146    19  UIKitCore                           0x0000000110bb33b5 -[UINavigationController _startDeferredTransitionIfNeeded:] + 896    20  UIKitCore                           0x0000000110bb46a7 -[UINavigationController __viewWillLayoutSubviews] + 150    21  UIKitCore                           0x0000000110b9538d -[UILayoutContainerView layoutSubviews] + 217    22  UIKitCore                           0x000000011171e9c1 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1417    23  QuartzCore                          0x0000000112c8feae -[CALayer layoutSublayers] + 173    24  QuartzCore                          0x0000000112c94b88 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 396    25  QuartzCore                          0x0000000112ca0ee4 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 72    26  QuartzCore                          0x0000000112c103aa _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 328    27  QuartzCore                          0x0000000112c47584 _ZN2CA11Transaction6commitEv + 608    28  UIKitCore                           0x0000000111269ccb __34-[UIApplication _firstCommitBlock]_block_invoke_2 + 128    29  CoreFoundation                      0x000000010d937aec __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12    30  CoreFoundation                      0x000000010d9372b0 __CFRunLoopDoBlocks + 336    31  CoreFoundation                      0x000000010d931b34 __CFRunLoopRun + 1252    32  CoreFoundation                      0x000000010d931302 CFRunLoopRunSpecific + 626    33  GraphicsServices                    0x0000000116a9f2fe GSEventRunModal + 65    34  UIKitCore                           0x0000000111250ba2 UIApplicationMain + 140    35  MyWebBrowser                        0x000000010c68eebb main + 75    36  libdyld.dylib                       0x000000010fdc1541 start + 1    37  ???                                 0x0000000000000001 0x0 + 1)libc++abi.dylib: terminating with uncaught exception of type NSException(lldb)

1
문태부 프로필

4분 12초 부근에서 뭔가 스킵하셨는데 문태부 2019.03.05
ㅁ 모양에 프레젠트 모달리 하는 부분이 없습니다. 제가 하면 겹쳐서 나오네요. 그리고 프로젝트 돌리면 아이덴티티 없다고 에러 나요.The file “todos.json” couldn’t be opened because there is no such file.허용여부 true, 오류 : 없음2019-03-05 09:26:32.086463+0900 Todos[69953:4622760] Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Todos.TodoViewController 0x7fc4802023c0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key memoTextField.' First throw call stack:(0 CoreFoundation 0x000000010e3ef1bb exceptionPreprocess + 3311 libobjc.A.dylib 0x000000010c95f735 objc_exception_throw + 482 CoreFoundation 0x000000010e3eed29 -[NSException raise] + 93 Foundation 0x000000010c38ade4 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 2924 UIKitCore 0x0000000110753292 -[UIViewController setValue:forKey:] + 875 UIKitCore 0x00000001109ea573 -[UIRuntimeOutletConnection connect] + 1096 CoreFoundation 0x000000010e3dacfd -[NSArray makeObjectsPerformSelector:] + 3177 UIKitCore 0x00000001109e72b9 -[UINib instantiateWithOwner:options:] + 18148 UIKitCore 0x000000011075a452 -[UIViewController _loadViewFromNibNamed:bundle:] + 3839 UIKitCore 0x000000011075addc -[UIViewController loadView] + 17710 UIKitCore 0x000000011075b0ee -[UIViewController loadViewIfRequired] + 17511 UIKitCore 0x000000011075b940 -[UIViewController view] + 2712 UIKitCore 0x00000001106c9177 -[UINavigationController preferredContentSize] + 19713 UIKitCore 0x000000011067a0ec -[UIPresentationController preferredContentSizeDidChangeForChildContentContainer:] + 6414 UIKitCore 0x0000000110675d0b __56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 11615 UIKitCore 0x0000000110d860d2 _runAfterCACommitDeferredBlocks + 31816 UIKitCore 0x0000000110d74b2c _cleanUpAfterCAFlushAndRunDeferredBlocks + 38417 UIKitCore 0x0000000110da3efc _afterCACommitHandler + 13518 CoreFoundation 0x000000010e353c27 CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION + 2319 CoreFoundation 0x000000010e34e0be CFRunLoopDoObservers + 43020 CoreFoundation 0x000000010e34e751 __CFRunLoopRun + 153721 CoreFoundation 0x000000010e34de11 CFRunLoopRunSpecific + 62522 GraphicsServices 0x000000011650b1dd GSEventRunModal + 6223 UIKitCore 0x0000000110d7a81d UIApplicationMain + 14024 Todos 0x000000010c00f607 main + 7125 libdyld.dylib 0x000000010f888575 start + 1)libc++abi.dylib: terminating with uncaught exception of type NSException

1
문태부 프로필

학습자료 문태부 2019.02.28
링크 눌렀는데https://www.inflearn.com/course/ios-%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%98%eb%b0%8d/wp-content/uploads/%EC%95%BC%EA%B3%B0_%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B89_%EB%AC%B8%EC%84%9C%EC%9D%BD%EA%B8%B0.pdf권한이 없는 접근을 요청하셨거나, 잘못된 경로로 들어오셨습니다.문제가 계속된다면 관리자에게 요청해 주세요!불편을 드려서 죄송합니다.라고 뜹니다.

1
YYY 프로필

[질문] collectionview에 사진이 중간중간 안나와서요. YYY 2019.02.12
안녕하세요 :-)실행해보았는데 카메라롤 앨범을 선택하면 PhotoCollectionCollectionview에 사진이 중간중간 안나오는데 왜 그럴까요?

1
민경태 프로필

Command+Shift+O를 눌렀을때 클래스 관련 개발문서로 이동이 안됩니다. 민경태 2019.01.19
Command+Shift+O를 눌렀을때 클래스 관련 개발문서로 이동이 안됩니다.검색창이 나오긴 하는데 UIKit을 치면 헤더파일만 나오는데요. 제가 잘못하는 부분이 있는지 알고 싶습니다.XCode버전은 10.1입니다. 감사합니다!

1
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스