Xcode 4 : UIView xib 만들기, 제대로 연결되지 않음


84

TableViewCell에 포함될 뷰가 포함 된 펜촉을 만들려고합니다. 인터페이스 및 구현 파일을 만들었 ResultCell.h으며 ResultCell.m. 재고, 즉시 사용 가능하며 코드 변경이 없습니다.

그런 다음 빈 XIB 파일을 만들고 UIView를 끌어 놓습니다. 그런 다음 파일 소유자를 클릭하고 유형을 ResultCell. 보기를 클릭하고 클래스도 ResultCell.

내가 가진 문제는 다음과 같습니다.

  1. 내가 살고있는 Assistant Editor보기를 ResultCell.h사용할 때 ResultCell.xib 파일을 볼 때 파일이 나타나지 않습니다. 자동을 클릭하고 파일을 선택하여 강제로로드해야합니다.
  2. 뷰에 레이블을 놓은 다음 Ctrl + 클릭하고 .h로 끌어서 콘센트를 만들면 다음 오류 메시지가 표시됩니다. " 새 콘센트 연결을 삽입 할 수 없습니다. ResultCell이라는 클래스에 대한 정보를 찾을 수 없습니다. "

뷰를 만들고 다시 만들려고했지만 작동하지 않고 인내심을 잃기 시작했습니다. 어떤 도움이라도 대단히 감사하겠습니다!


나는 이것을 직접 만났다. 어젯밤에 효과가 있었지만 오늘은 아무것도 없었습니다. 뭔가 찾으면 알려 드리겠습니다.
Tavison

기록을 위해 여기에 여러 답변이 작년에 도움이되었습니다. 최신 버전의 Xcode는 개선되었습니다.
Tim Sullivan

답변:


82

특정 문제에 대해서는 작동하지 않을 수 있지만 새로 생성 된 펜촉으로 작업 할 때 가끔 해당 오류가 발생합니다. 이전과 동일한 이름을 가진 펜촉과 뷰 컨트롤러를 삭제하고 다시 생성해도 문제가 해결되지 않았지만 Xcode를 다시 시작하면 해결되었습니다.


+1 나를 위해 일했습니다. XCode를 다시 시작하면 이제 CTRL + Drag를 사용하여 .h 파일에 새 @propertys를 만들 수 있습니다.
Mike Gledhill 2011

1
David Pisoni의 대답은 저에게 효과적이었습니다. Xcode를 다시 시작하는 것만으로는 겨자를 자르지 않았습니다.
Andy

나는 지금 많은 Xcode 릴리스 에서이 문제가 발생하지 않았으므로 작년 에이 답변을 작성할 때 경험했던 것보다 더 널리 퍼진 또 다른 원인이 있습니다.
조각 모음

@Defragged는 또한 인용하기 전에 Command K를 눌러 캐시를 지우는 단계를 포함 할 수 있습니다. 또는 더 좋은 방법은 Xcode를 종료 한 다음 캐시를 지우는 것입니다 ( ~/Library/Developer/Xcode/DerivedData)
user1046037 2013

저는 Xamarin Studio에서 일하고 있습니다. xcode와 xamarin studio를 종료 한 다음 Xamamrin Studio를 다시 열고 여기에서 xcode에서 시작된 xib 파일을 열어야했습니다. 그러면 보조 편집기가 올바르게 열렸습니다.
Dave Haigh 2013 년

113

오늘도 비슷한 상태가되었습니다. 매우 이상했습니다. 프로젝트에 이미 존재하는 ViewController 클래스에 XIB (신규 또는 기존)를 연결할 수 있었지만 새 ViewController를 만들 수 없었고 XIB에 제대로 연결하지 못했습니다. "보조"기능은 작동하지 않았고 IB- 헤더 파일 연결 기능도 작동하지 않았습니다.

프로젝트를 닫고 다시 열어도 문제가 해결되지 않았습니다.
XCode를 종료하고 다시 시작해도 문제가 해결되지 않았습니다.
새 프로젝트를 만들고 기능을 테스트하는 것이 잘 작동하여 어딘가에 캐시에 뭔가 손상된 것이 있다고 믿게되었습니다.

내 솔루션

  • 프로젝트를 닫습니다.
  • ~ / Library / Developer / XCode / DerivedData 폴더로 이동하여 작업중인 프로젝트를 참조하는 모든 하위 폴더를 제거합니다.
  • XCode에서 프로젝트를 엽니 다. 이제 문제가 해결되어야합니다.

덧붙여서, 전체 청소를 실행하는 것만으로는 문제가 해결되지 않는 것 같습니다. 파생 된 데이터를 폐기해야했습니다. 나는 내가 플레이하고 있던 git 게임 때문에이 위치에 들어갔을 것이라고 확신하지만, 이전 git 개정판으로 다시 전환해도 도움이되지 않았기 때문에 어떻게 빠져 나갈지 몰랐다. (그것은 또한 프로젝트 자체에서 추적되지 않은 무언가라는 큰 단서였습니다.)


6
방금 Mac에서 SO에 로그인하여이 답변을 찬성 할 수있었습니다! 완전히 나를 위해 일했습니다. XCode를 사용하는 법을 배우는 중이고 이와 같은 우스꽝스러운 문제 없이는 이미 충분히 어렵습니다. :) 감사합니다!!!
Dave

2
xcode를 다시 시작하지 않고도 작동합니다. 다만 파생 된 데이터를 삭제하고 (A 아이폰 OS 프로젝트) 재건

이것은 xcode를 다시 시작할 때 작동하지 않았습니다. David Pisoni의 방법이 어떻게 작동했는지 전혀 모릅니다.
mmopy

대박. 어떻게 알았어? 나를 위해 일했습니다.
hol

1
롤 IOS와 xcode는 이클립스와 안드로이드를 사용하는 것보다 더 많지 않다면 버그가있을 수 있다는 것을 아는 것이 좋습니다 : p
James andresakis

14

나는 방금이 문제가 있었고 Xcode를 다시 시작해도 문제가 해결되지 않았습니다. 프로젝트에서 클래스 파일을 제거한 다음 다시 추가하고 작동하기 시작했습니다.


13

나는 똑같은 문제가 있었다. 그리고 나는 시도했다 :

  • Xcode 다시 시작
  • 파생 데이터 삭제
  • 그리고 더 많은

그 어느 것도 효과가 없었습니다. 나를 위해 일한 것은 단순히 다음과 같습니다.

  • 프로젝트에서 '의심스러운'클래스 파일을 제거합니다 (참조 만 제거합니까?)
  • 프로젝트에 다시 추가

그리고 끝났습니다!


2
이것은 나를 위해 일했습니다, 감사합니다! XCode를 다시 시작하는 것 외에 가장 먼저 시도한 작업이었습니다. 작업과 위험이 가장 적은 것 같았고 훌륭하게 작동했기 때문입니다.
adriandz

1
xcode를 다시 시작하고 파생 된 데이터를 삭제 한 후 나를 위해 일했습니다
elad s

1
이것은 나에게도 속임수를 썼다. 이것은 클래스 이름을 리팩토링하는 것과 관련이있을 수 있습니다 (이전에 방금했던 것입니다).
ecotax 2013-04-23

9

Xcode를 다시 시작해도 작동하지 않으면 새 .m 파일을 대상 멤버로 전환했다가 다시 전환하는 것이 작동 함을 발견했습니다.


3

이것은 나를 도왔습니다.

  1. 프로젝트 파일 패널 (왼쪽)에서 깨진 xib 파일을 선택합니다.
  2. 편집기보기에서 파일 소유자 아이콘을 클릭하십시오.
  3. 속성 패널 (오른쪽)에서 세 번째 탭 (상단)을 선택합니다.
  4. "사용자 정의 클래스"지정

"패널"이 보이지 않으면 창의 오른쪽 상단을보고 적절한 "보기"버튼을 활성화하십시오. "보기"버튼이 보이지 않으면 오른쪽 상단의 캡슐 버튼을 클릭하십시오.


최근에 클래스 이름을 변경 (리팩터링)했습니다. 이 답변에서 언급 한 사용자 정의 클래스는 여전히 이전 이름으로 설정되었습니다. 새 이름으로 변경하고 수정되었습니다.
PaulMrG 2013

2

.m 파일이 en.lproj 폴더로 이동 한 것을 확인했습니다.

Xcode에서 .m 파일을 삭제 (참조 전용)하고 en.lproj에서 .m을 이동했습니다. 다시 추가하면 문제가 해결됩니다.

걱정하지 마세요. 모든 연결이 복구됩니다.


내 .m이 자동 생성되었고 아직 변경하지 않았습니다. 나는했고 모든 것이 괜찮 았습니다. 다른 것은 효과가 없었습니다.
entonio 2013 년

2

오늘도 같은 문제가 발생했습니다. XCode를 다시 시작해도 문제가 해결되지 않았습니다. Organizer 에서 찾을 수있는 프로젝트"파생 데이터""삭제" 옵션을 사용하여 작업을 정상으로 되돌릴 수있었습니다 . Organizer는 "파생 데이터에는 색인, 빌드 출력 및 로그가 포함됩니다"라고 말합니다. 나도 추측 인덱스 또는 빌드 출력이 이 문제를 일으키는 원인이되었다.


2

XCode에서 주최자로 이동하여 프로젝트를 클릭하고 파생 데이터 삭제를 클릭합니다. 프로젝트를 정리하는 것보다


2

제 경우에는 해당 헤더 파일에 "가짜 변경"(공백)을 만드는 데 도움이되었습니다.


나는 이것이 나에게도 해냈을 것이라고 생각합니다. 제 경우에는 수동으로 콘센트를 추가했습니다. 그런 다음 국수를 연결하고 Ctrl 키를 눌러 새로운 콘센트를 만들 수있었습니다.
Daniel Wood

1
  1. ResultCell은 다음의 하위 클래스 여야합니다. UITableViewCell
  2. UIView빈 캔버스로 드래그해서는 안됩니다.UITableViewCell
  3. 셀을 선택하고 하위 클래스로 변경 해야 합니다.
  4. 소유자는 대부분 셀에 대한 콘센트가있는 컨트롤러입니다.

새 셀을로드 할 때마다 다음을 호출하십시오.

 [[NSBundle mainBundle] loadNibNamed:nibName 
                               owner:controllerWithOutletToCell 
                             options:nil]

로드 후 셀을 사용하고 ivar / outlet을 nil로 설정하여 다음로드를 준비합니다.

다른 방법이 있지만 이것은 일반적입니다


그렇게하면 똑같은 문제가 생깁니다. 어시스턴트 편집기는 펜촉을 볼 때 .h를 표시하지 않으며 ctrl + drag는 콘센트 코드를 생성하지 않고 오류를 표시합니다.
Tim Sullivan

2
4.0.2 Xcode를 사용하고 있습니까? 어시스턴트 에디터가 오작동하는 경우 수동으로 설정할 수 있습니다. 이 문제를 다시 테스트하기 위해 앱을 다시 시작했다고 가정합니다 (Xcode 4는 종종 이점을 얻습니다). 프로젝트에서 클래스 파일을 찾을 수 없거나 이름이 잘못되었습니다. 대소 문자가 중요합니다. 프로젝트가 현재 구축 중입니까? 이것은 새로운 컴파일러 기술에 의존하는 매우 높은 수준의 기능입니다.
bshirley

아, eff 나. 예, Xcode를 다시 시작하면 즉시 작동하기 시작했습니다. '실례합니다. 이제 검에 쓰러 질 것입니다.
Tim Sullivan

1

아마도 저에게 효과가 있었던 것은 이것입니다 .. (Xcode v4.5)

이것은 작동하지 않았다

내 .h의 인터페이스 정의로 드래그를 제어하려고했습니다.

@interface SearchViewController : UIViewController

@end

이것은 효과 가 있습니다 (예상했던 방식 수 있습니다. 전에는 몰랐습니다) 열기 및 닫기 괄호를 참조하십시오. 닫힌 괄호 뒤의 드래그 앤 드롭을 제어합니다.

@interface SearchViewController : UIViewController
{
}

@end

1

Swift로 작성된 프로젝트에서 비슷한 문제가 발생했습니다.

나를 위해 일한 것은 다음과 같은 코드로 IBOutlet을 설정하는 것이 었습니다.

@IBOutlet var foo: UIView?

그런 다음 코드 라인 바로 옆에 나타나는 작은 원으로 드래그하여 인터페이스 빌더에 연결합니다.


이것이 나에게도 작동하도록 할 수있는 유일한 방법입니다. Objective-C (오늘 iOS 앱 개발 시작) 용으로 작성된 Apple 튜토리얼을 따르고 있었으며 New To-Do Item 텍스트 필드를 연결해야했습니다. 마지막으로 @IBOutlet var textField : UITextField? 그에 연결되어 작동했습니다. XCode 6.4 사용
andrewz 2015-07-30

1

위의 해결 방법 중 어느 것도 나를 위해 커넥터 문제를 해결하지 않았으므로 다음 stackoverflow 스레드를 만날 때까지 애완 동물 프로젝트를 보류했습니다.

https://stackoverflow.com/a/15873770/2846800

저는 이전 버전의 XCode에서 대규모 프로젝트를 진행하고 있었고 인덱싱을 해제했습니다. 인덱싱을 다시 활성화하면 문제가 해결되었습니다.

defaults delete com.apple.dt.XCode IDEIndexDisable

이제 Interface Builder의 D & D 기능을 사용할 수 있습니다. 이것이 다른 사람들에게 도움이되기를 바랍니다.


1

이 문제는 파일을 같은 이름의 새 파일로 대체 할 때 주로 나타나는 Xcode 버그 인 것 같습니다. Xcode는 같은 이름의 이전 파일에 대한 참조를 유지하는 것 같습니다.

어쨌든이 문제를 해결하는 방법은 다음과 같습니다.

  1. 프로젝트 정리
  2. Project Navigator보기에서 (Your Project)를 클릭합니다. 빌드중인 대상의 빌드 단계에서 소스 컴파일로 이동하십시오. 문제를 일으키는 .m 파일을 제거하고 다시 추가하십시오.
  3. 또는 NIB 파일의 파일 검사기 (유틸리티보기)에서 대상 구성원 아래에서 대상 이름을 선택 취소하고 다시 확인하십시오.
  4. 좋은 측정을 위해 Xcode를 다시 시작하십시오.
  5. 물론 .m 파일을 삭제하고 다시 추가하는 것만으로도 문제가 해결됩니다.

(1 단계와 2 단계만으로 해결되었습니다.)


0

다른 프로젝트에서 파일을 복사 한 경우 '대상에 추가'확인란을 선택하십시오.



0

비슷한 증상이지만 원인이 다릅니다.

표준 파일 템플릿 주석 줄 중 하나가 //에서 /로 이동하여 파일이 컴파일되지 않기 때문에 포커스가 어시스턴트 뷰에있을 때 분명히 백 스페이스를 쳤습니다.

주석을 수정하면 SDK가 파일을 구문 분석하고이를 UIViewController로 인식하고 콘센트에 추가 할 수있었습니다.

따라서이 문제가 발생하면 빌드 또는 분석을 수행하여 뷰 컨트롤러 .h 파일에서 수정해야하는 오류가 있는지 확인합니다. 그런 다음 다른 솔루션을 시도하십시오.


0

이것은 오래된 주제 일 수 있지만 나중에 같은 문제가 발생할 경우 관련 .xib, .h 및 .m 파일을 삭제하고 새 파일을 만드십시오. 나를 위해, 내 .h 파일의 UIViewController는 보라색이 아니었고 심지어 백 스페이스와 타이핑도 도움이되지 않았습니다.


0

@implementation과 @synthesize 사이에 줄을 넣으십시오. 여기에있는 대부분의 답변에는 공통점이 있습니다. 그것은 나를 위해 일했습니다

@implementation 

@synthesize

0

여기에서 모든 것을 시도했지만 아무것도 작동하지 않았습니다 (Xcode 5 용 개발자 미리보기 사용).

나를 위해 일한 유일한 것은이 불완전한 줄을 인터페이스 파일에 넣는 것입니다.

@property (nonatomic, weak)

이유가 무엇이든간에 .xib에서 끌어서 놓기로 콘센트와 작업을 추가하면 그 후에 잘 작동했습니다.


0

나를 위해 DerivedData를 정리하거나 삭제하면 문제가 해결되었습니다.

내 UIViewController 클래스를 여러 번 삭제하고 다시 만들려고 시도했지만 계속해서 문제가 발생했습니다.

그런 다음 UIViewController 클래스를 다시 만들고 다른 이름을 지정했습니다. 이것은 나를 위해 문제를 해결했습니다.


0

이 문제가 발생하여 위에 나열되지 않은 해결책을 찾았습니다.

제 경우에는 사용자 정의 뷰 컨트롤러가 클래스를 인식하지 못하기 때문에 클래스 .h 파일에 문제가 있음을 알 수있었습니다 : UIViewController (보라색이 아닌 검정색). 다른 모든 사용자 정의 뷰 컨트롤러에는 자주색 UIViewController가 있습니다.

제 경우에는 클래스를 타겟 / 빌드 단계 / 컴파일 소스 드롭 다운에 추가해야했습니다. .m을 추가해야합니다. 다른 .m은 모두 거기에 있었지만 이번에는 없었습니다.

추가하면 : UIViewController가 보라색으로 나타나고 모든 것이 잘 작동했습니다.


0

제 경우에는 다른 종속성이있는 여러 프로젝트가 있습니다. 파생 데이터를 삭제하거나 XCode를 다시 시작하여 해결하려고했지만 작동하지 않았습니다. 결국 다음 방법을 시도해 보았고 작동합니다.

target> Build Target Architectures Only>로 이동하여 디버그 및 릴리스를 모두 NO로 설정하십시오.

작업 공간의 모든 프로젝트에 대해이를 설정하고 다시 컴파일하여 다른 오류가 없는지 확인하십시오. 말이 안되는 것 같지만 어떻게 든 해냈어요. 컴파일하는 동안 링커 오류 및 기호를 찾을 수없는 것과 같은 다른 문제가 발생했습니다.


0

이 클래스 뷰의 * .m 파일에 대해 "Show File Inspector"를 열고이 프로젝트에 대한 "Target membership"을 선택 취소 한 다음 Clean (제품 메뉴-> Clean)을 수행하고이 프로젝트에 대한 "Target membership"을 다시 확인합니다.

여기에 이미지 설명 입력


0

Swift를 사용하면 비슷한 문제가 발생했습니다. 댓글 이 저에게 문제의 일부 라는 것을 알았 습니다.

기본보기 컨트롤러를 활용하고 일부 작업을 수행 한 다음 첫 번째 전체를 복사하고 viewDidLoad ()로만 제거하고 클래스 이름을 TestViewController로 변경하여 두 번째보기 컨트롤러를 만들었습니다. 빌드가 작동하고 코드가 실행되었습니다. 모두 좋았습니다.

콘센트를 만들기 위해 UITextField를 끌어다 놓았을 때 허용되지 않았습니다. 내 의견이 여전히 "ViewController.swift"로 표시되어있는 것을 알았으므로 주석 텍스트를 "TestViewController.swift"로 변경하고 다시 작성했습니다. 콘센트를 연결할 수있었습니다!

인덱서가 주석과 클래스 이름을 읽고 있었는데 어떻게 든 혼란 스러웠는지 궁금합니다.


0

이것이 누군가를 돕기를 바랍니다.

파생 된 데이터 폴더를 삭제해야했습니다. 창-> 구성자-> 프로젝트-> 파생 데이터 삭제를 클릭해야합니다.

그리고 XCODE를 다시 시작하십시오.

당신은 잘 가야합니다!


0

"TARGET"의 일부가 아닌 새 클래스는 이러한 답변 중 일부에서 암시하는 것처럼이 문제의 근본 원인 일 수 있습니다.

새 코코아 클래스를 만들 때 기본적으로 대상에 새 클래스를 추가하는 옵션이 기본적으로 선택되어 있지만 어떤 이유로 든 저장을 누를 때 선택하지 않으면이 문제가 발생합니다.

새로운 클래스 대상

앱 대상에 새 클래스를 추가하는 이러한 해결 방법은 문제를 해결하는 데 작동하며 이러한 모든 '수정'이 공통적으로 갖는 것입니다.

XCode에는 기본적으로 새 파일이 앱 기본 대상에 추가되지 않도록하는 버그가있을 가능성이 높습니다. 수정 은 메인 TARGET에 '깨진'클래스를 추가하는 것으로 요약됩니다.


0

XCode 7.1에서 소스 파일의 다른 지점에 커넥터를 추가하면 작동했습니다. 클래스 인 것처럼 내 변수 중 하나를 참조하는 오류가 발생했습니다. 해당 변수 위에 대신 해당 변수 아래에 커넥터를 추가하면 오류가 발생하지 않습니다.


0

문제에 대한 다른 이유도 있습니다 ... iOS 이외의 템플릿으로 새 코코아 클래스 파일을 만든 경우 ... 나는 일어날 수 있습니다 ...

해결책은 그것을 삭제하고 올바른 템플릿으로 다시 만드는 것입니다. 여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.