Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩
UIKit/UIKit

Could not insert new outlet connection (.xib)

by Toughie 2023. 2. 27.

Cocoa Touch Class를 통해 새 파일을 생성할 때 

아래와 같이 Also create XIB file 체크박스를 찾을 수 있다.

저걸 체크하고 파일을 생성하면 스토리보드에 컴포넌트를 올렸던 것처럼

그 컴포넌트 하나가 똑 화면에 보이게 된다.( 아래는 UITableViewCell)

모든 컴포넌트를 XIB를 통해 관리하기 보다는, 스토리보드, 코드베이스와 적절히 섞어서 활용하는 경우가 많다고 한다.

예전에는 .nib파일이어서 닙 닙 했다는데.. 이게 xib로 바뀐거 같다. 

그래서 뭐가 다른지 알아봤더니..


(출처 : https://zeddios.tistory.com/298)

nib은 (NeXT Interface Builder)의 약자라고 해요. xib는(Xml Interface Builder)

xib는 이름에서 볼 수 있듯이 xml기반입니다. nib은 바이너리(binary)라고 해요.

 

사실 원래 nib만 있었는데 xib가 추가된거랍니다.

xib가 "플랫 파일"에 저장된다는 점을 제외하고는 nib과 기능적으로 동일하다고 해요 :)

(flat file : 플랫파일(flat file)은 아무런 구조적 상호관계가 없는 레코드들이 들어 있는 파일)

xib는 Bundle이 아닌 플랫 파일이기 때문에, SCM(source control management : 소스 제어 관리)시스템을 보다 쉽게 처리할 수 있다고 해요.(=xib가 소스컨트롤에 친숙함)

그리고, 빌드를 하면, xib가 앱에 포함될 nib파일로 컴파일 된다고 합니다. 

 

Q : 그럼 왜 xib쓰냐 ㅡㅡ

A : nib은 바이너리라고 그랬죠? 그래서 nib파일과 함께 SVN을 사용하면 문제가 생긴다고 해요. 그래서 xib(xml기반)가 nib대신인거죠...라는 말도 있고!!!!

diff를 수행할 수 없고, 바이너리 파일로 처리해야하기때문에 효율성이 훨씬 떨어진다는 것 때문이라고도 합니다 :)

 

-> 좀 더 효율적으로 파일을 처리하기 위해 변경되었다. 정도로 생각하고 우선 넘어가자.
(nib이라고 하면 xib 파일을 말씀하시는 거구나 정도로 알아들으면 되는 것..)


자 똑같이 위에 이미지 뷰를 올리고, 코드와 연결하려는데 이상한 에러가 난다.

분명 문제가 없어 보이는데.. 안된다. 그래서 또 찾아봤다.

Xcode의 에러라는 말이 많길래 (대체 왜이렇게 에러가 많은지)

command + shift + k를 통해 클린빌드를 해보고, Xcode를 껐다 켜봐도 똑같이 에러가 뜬다 ㅎㅎ.

 

스택에서도 해결법들이 나와있었는데 나는 메뉴얼로 연결해주는 방법을 택했다.

https://stackoverflow.com/questions/29923881/could-not-insert-new-outlet-connection-could-not-find-any-information-for-the-c

 

원래 컨트롤을 누르고 끌어서 코드로 옮기면 자동완성 되었던 코드를 직접 쳐서 코드와 컴포넌트를 연결해주면 에러가 안뜬다! 

(정확하게는 코드에서 UIImageView!가 맞다. 이미지뷰 객체가 확실히 존재하니 강제 언래핑 해주는 것)

 

모델링 코드를 짜다가 에러가 나면 그러려니 하는데, 당연히 잘 되던 것들이 안되면 가끔 당황스럽다.

그래도 검색하면 대부분 나오니.. 검색하는 연습을 한다고 오히려 좋아 마인드로 임하고 있다 :)