---
# System prepended metadata

title: 기능구현 및 코드설명 ✏️

---

# 기능구현 및 코드설명 ✏️
 * checkFruitsStock(viewVontroller) : 뷰 컨트롤러에서 재고를 보이게 하기 위한 재고 확인 함수
 * order\(쥬스이름) : 버튼 액션 함수들로 각 버튼에 맞는 쥬스들이 제조 되게 구현
 * changeStockButton : 버튼을 누르면 화면 전환이 되도록 구현
 * showMakeJuiceMessage : 쥬스가 제조 되었을 경우에 띄우는 얼럿 메세지
 * showCheckStockMessage : 재고가 부족하여 쥬스를 제조하지 못했을 경우 재고를 수정할지 말지를 묻는 얼럿 메세지
 * decideMessage : 쥬스 제조 버튼을 눌렀을 경우 동작되게 구현, 재고가 충분하여 쥬스가 제조되면 showMakeJuiceMessage함수를 실행, 재고가 부족하여 쥬스 제조에 실패하면 showCheckStockMessage를 실행하는 함수
 * checkFruitsStock(FruitStore) : 뷰 컨트롤러에서 FruitStore내부의 재고에 접근하기 위한 함수 재고를 문자열로 변환
 * checkInventory : 쥬스의 레시피를 받아와서 재고가 충분하지 않으면 에러를 던지는 함수


## [STEP 2] 고민한점 및 해결방안 🤔

* STEP 2 기능구현 과정 중 Thread 1: "-[JuiceMaker.ViewController orderStrawberryBananaJuice:]: unrecognized selector sent to instance 0x145207340" 라는 에러가 계속 뜨길래 어려움을 겪었습니다. 그러나 에러처리 과정에서 실수가 있었던 것을 찾아 내었고 해결 하게 되었습니다. 그런데 이 에러처리 과정에서 에러 열거형 안에 선언된 에러는 하나 인데 catch 문을 하나 더 써줘 야지만 구현이 가능하게 되었습니다. 에러는 하나인데 왜 캐치문을 하나 더 써줘야 하는지 저희는 아직도 그 이유를 잘 모르겠습니다..

* 딸기바나나 쥬스 등 두가지의 맛을 내는 음료를 제조 할때 하나의 과일이 품절임에도 불구하고 다른 하나의 과일의 재고가 여전히 사용되는 경우가 발생 하였습니다. 이를 해결하기 위해 Do문 안에서 try문을 먼저 위치 시킴으로써 오류가 발생했을 시 바로 캐치문으로 넘어가게 하였습니다. 그리하여 try문 밑에 위치하던 코드는 실행이 되지않아 문제를 해결할 수 있었습니다.

* 재고 부족 alert 메세지에서 '예'를 터치할 경우 재고 수정 화면으로 넘어가게 하는 방법을 몰라 고민을 하게 되었는데, performsegue라는 기능을 알게 되어 해결을 하게 되었습니다.

### 궁금한 점 🥲

* 물론 에러가 상황에 따라 의미하는 바가 천차 만별 일 수 있겠지만 'Thread 1: "-[JuiceMaker.ViewController orderStrawberryBananaJuice:]: unrecognized selector sent to instance 0x145207340"' 이 오류는 보통 어느 경우에 발생하나요 ?

* 뷰컨트롤러에서 쥬스 생성 버튼에 따른 함수들이 비슷한 형태로 계속 나열 되는 것이 뭔가 간결화 할 수 있을 것 같다는 생각을 하게 되었습니다.. 하지만 어떻게 해야 할지는 감이 잘 오질 않는데 하리보가 추천하는 방법이 있을까요...?

* alert style 에서 .destructive 와 .cancle 의 차이를 잘 모르겠습니다..

* alert 메세지를 띄울 때 처음에 .default에 예를 띄우고 .cancel에 아니오를 띄우도록 했더니 "예"가 오른쪽으로 가고 "아니오"는 왼쪽으로 갔습니다. 이 위치가 저 스타일들의 고정값인지 아니면 바꿔줄 수 있는지도 알고 싶습니다. 결국 .default와 .destructive로 처리 해주었는데 이거는 저희 생각 대로 왼쪽에 "예", 오른쪽에 "아니오"가 출력됐습니다. 어떤 이유가 있는지 궁금합니다.