2012-10-25 2 views
0

참고 : 아마도이 질문에는 순수한 Objective-C 전문가도 대답 할 수 있습니까? 주로 MonoTouch에서 작업하지만이 문제는 이 아닌이 MonoTouch에만 적용될 수 있다고 생각합니다..xib의 빈 IBClassDescriber 요소로 인해 XCode에서 .h 파일 연결이 손실되었습니다.

일반적으로 XCode의 Assistant Editor에 .h 파일이 표시되지 않으면 나는 단지 close everything, delete my obj directory, and rebuild all입니다. Indexing 프로세스가 완료 될 때까지 기다립니다. 그러나 이번에는 .h 파일을 표시 할 수 없어서 FooViewController에 새 콘센트를 추가 할 수 없습니다.

지금까지, 나는 더 많은 같은 검색해야하는 내 FooViewController.xib

<object class="IBClassDescriber" key="IBDocument.Classes"/> 

의 빈 IBClassDescriber 요소를 아래로 추적 한 다음 .h 파일에 대한 링크가 있습니다

<object class="IBClassDescriber" key="IBDocument.Classes"> 
     <array class="NSMutableArray" key="referencedPartialClassDescriptions"> 
       <object class="IBPartialClassDescription"> 
         <string key="className">FooViewController</string> 
         <string key="superclassName">UIViewController</string> 
         <dictionary class="NSMutableDictionary" key="outlets"> 
          ... 
         </dictionary> 
         <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName"> 
          ... 
         </dictionary> 
         <object class="IBClassDescriptionSource" key="sourceIdentifier"> 
           <string key="majorKey">IBProjectSource</string> 
           <string key="minorKey">./Classes/FooViewController.h</string> 
         </object> 
       </object> 
     </array> 
</object> 

minorKeyIBClassDescriptionSource입니다.

내 프로젝트를 정리하고 모든 응용 프로그램을 닫고 objbin 디렉토리를 삭제하려고했습니다. 위의 파일 이름 바꾸기 시도했다. 그리고 다른 여러 가지 산발적 인 저주와 삭제/되돌리기/큰소리로 소리 치기. 아무 소용이 없다.

누군가가 비운 후에 IBClassDescriber 요소를 복구하는 방법을 알고 있습니까?

파일 기록을 살펴보고 사라진 시점을 확인할 것입니다. 어쩌면 저에게 단서를 줄 수 있습니다.

감사합니다. CM

+0

반쯤은 ... 나는 IBClassDescriptionSource'이 비어로 설정됩니다'시나리오를 다시 만들 수 있어요. 나가 이것을 파악할 때 올 세부 사항. 하지만, 빨리, FooViewController를 만든 다음,'.designer' 파일 (아마도 이름 바꾸기)에서'Register ("FooViewController")를 변경하면, XCode의 파일을 저장할 때'IBClassDescriber' 항목이 비게됩니다. – cod3monk3y

+0

알았습니다! 해결책이 올 것입니다. – cod3monk3y

답변

0

ViewController 파일의 이름을 변경하고 이전 이름에 대한 모든 참조를 업데이트하지 못한 경우 (다른 사람들과 마찬가지로)이 시나리오가 생겼습니다. 보기 컨트롤러의 이름을 변경해야하는 곳이 몇 군데 있지만 Xcode와 MonoDevelop를 동기화하기 위해 일치해야하는 곳은 실제로 2 곳뿐입니다. 이 예제에서는 FooViewController이라는 뷰 컨트롤러가 있다고 가정하고 BarViewController으로 이름을 변경했습니다.

먼저 XCode (XC)를 시작할 때마다 MonodDevelop (MD)는 obj/XCode/#이라는 임시 디렉토리를 만듭니다. 여기에서 #은 0으로 시작하고 XC를 다시 시작할 때마다 1 씩 증가합니다. MD를 재시작 할 때마다 번호가 0으로 재설정됩니다. XC를 닫고 MD로 돌아올 때마다 디렉토리가 삭제됩니다.

참고 :

MD는 XC 볼 것으로 예상하고 그 디렉토리에 필요한 .h.m 파일을 생성 등, 파인더 또는 터미널에서 디렉토리를 검색하는 경우 디렉토리가 삭제되지 않습니다. 이러한 파일의 이름은 Register 속성이 YourViewController.designer.cs 인 경우 값을 기반으로합니다. 내가 열 때

[Register ("BarViewController")] 

는 이제 .xib 내가 지칠대로 지친 No Assistant Results 오류가 발생합니다 : 내 경우, 나는 제대로에 .designer 파일을 업데이트했다.MD의 소스 코드 편집기에서 열 때이 시점에서

, 내 .xib 파일, 전체 IBClassDescriber 섹션을 보여 주었다 (나는 아직 업데이트되지했기 때문에 잘못 ./Classes/FooViewController.h를 참조하지만).

내가 한 것은 .xib XC에서 저장했습니다. XC는 (MD 지금 BarViewController.h 생성 된) ./Classes/FooViewController.h를 찾을 수 없습니다 때문에, 나에게

<object class="IBClassDescriber" key="IBDocument.Classes"/> 

내가 제대로 .xib를 업데이트하지 못했다 빈 엔티티를주는 .xib에서 IBClassDescriber 부분을 삭제, 지금은이 전체를 잃었다 섹션 (내가 원하지 않거나 재창조하는 방법을 알지 못했던 수많은 참조가 있음).

.xib-1.CustomClassname 속성이 잘못 설정되었다는 것을 알았습니다. 를 업데이트하면 Register

<dictionary class="NSMutableDictionary" key="flattenedProperties"> 
    <string key="-1.CustomClassName">BarViewController</string> 
    ... 
</dictionary> 

를 설정하고 다시 저장 파일이 .h 파일

<object class="IBClassDescriber" key="IBDocument.Classes"> 
     <array class="NSMutableArray" key="referencedPartialClassDescriptions"> 
       <object class="IBPartialClassDescription"> 
         <string key="className">BarViewController</string> 
         <string key="superclassName">UIViewController</string> 
         <object class="NSMutableDictionary" key="outlets"> 
          ... 
         </object> 
         <object class="NSMutableDictionary" key="toOneOutletInfosByName"> 
          ... 
         </object> 
         <object class="IBClassDescriptionSource" key="sourceIdentifier"> 
           <string key="majorKey">IBProjectSource</string> 
           <string key="minorKey">./Classes/BarViewController.h</string> 
         </object> 
       </object> 
     </array> 
</object> 

그래서 요약에 적절한 참조가 전체 IBClassDescriber 부분을 다시 XC 결과는 당신이있을 때 일치하는 파일 이름 바꾸기, 장소 변경 :

  1. 기본 ViewController 클래스의 리팩터링/이름 바꾸기 (예 : FooViewController.cs ~). Refactor (오른쪽 클릭 클래스 파일 -> 리팩터링 -> 이름 바꾸기)를 사용하면 .designer 파일과 코드 전체에서 클래스에 대한 참조를 포함하여 많은 내용이 업데이트됩니다.
  2. ViewController 생성자에서 수퍼 클래스에 전달 된 문자열 값을 변경하십시오. 와 MD에 BarViewController.xib
  3. 열기 BarViewController.xib : [Register ("BarViewController")] partial class BarViewController
  4. .xib의 이름을 바꿉니다 XC와 MD 사이의 연결이 유지되도록
  5. .designer 파일을 열고 Register 전화를 변경 런타임에 클래스를로드 할 필요 public GrepViewController() : base ("BarViewController", null) 소스 편집기 (오른쪽 클릭 -> 열기 -> 소스 코드 편집기)과 -1.CustomClassName 키 변경 : MD
  6. XC에서 열기 BarViewController.xib에서 <string key="-1.CustomClassName">BarViewController</string>
  7. 저장 .xib합니다. (MD에서 열어 본 경우에는 마우스 오른쪽 버튼을 클릭해야합니다 -> 연결 프로그램 -> XCode). 색인 작성이 완료 될 때까지 기다린 다음 길잡이 편집기를 엽니 다. BarViewController.h이 (올바르게) 열렸습니다.
  8. XC에서 .xib을 저장하십시오.
  9. .xib을 MD로 열고 공백 인 경우에도 IBClassDescriber 섹션이 완전히 지정되어 있는지 확인하십시오.

배송하십시오!

누군가가 도움이되기를 바랍니다. XC와 MD의 연계에 대한 신비를 깨우거나 적어도이 문제가 생길 때 다음에해야 할 일을 생각 나게합니다.

건배, CM이

+0

참고 : SO가 나를 허용 할 때 답변으로 받아 들일 것입니다 (2 일 후). – cod3monk3y

관련 문제