2012-05-07 3 views
7

iOS의 initWithNibName은 똑똑합니다. iPhone 대신 iPad 용 다른 NIB를 자동으로로드하는 것과 같은 작업을 수행합니다 (많은 사람들이 이것을 모르고 있지만 UIViewController.initWithNibName에 문서화되어 있지 않습니다!).initWithNibName과 일치하는 파일 이름에 대한 규칙은 무엇입니까?

하지만 그 밖에 무엇을 할 수 있습니까? 나는이에 대한 찾은 유일한 애플의 워드 프로세서는 설명 :

  1. 그것은에 대한보고와 파일을 찾을 것입니다 ~ 아이 패드 나 ~ 이름의 끝에 아이폰은
  2. 애플 이 규칙을 따른다고을 의미

그러나이 이미지 매칭에 대한 규칙에는 링크가 없습니다, 그리고 나도 :(대한 명시적인 문서를 찾을 수 없습니다 일치하는 자동 이미지 파일 이름에 대한

규칙이 포함될 수 있습니다 :. "다른 NIB 수 망막의 경우 @ 2x를 파일 이름의 끝에 붙이십시오. "(나는 이것이 작동하는지 전혀 모른다).

내가 정말로 찾고있는 것은 규칙이 사용 된 목록입니다. (예를 들어, "로드 프리 펜촉 대로드 세로 펜촉"이있는 경우)

+0

큰 질문입니다!애플이 자신의 템플릿 코드에서 이것을 사용하지 않는 것 같기 때문에'~ iphone'과'~ ipad '매칭에 대해서조차 몰랐다. 나는이 질문을 보게 될 것이다! – mbm29414

답변

2

To : 많은 수의 하드 코딩을 저장합니다 (필자가 작성한 거의 모든 단일 응용 프로그램에서 반복됨). 당신의 (주)의 질문에 대답, 이러한 파일 이름 일치에 대한 규칙이 initWithNibName에 있습니다

... 그러나, 당신이 펜촉 이름을 지정하지 않고, 사용자 정의 서브 클래스에서 에는 loadView 메소드를 오버라이드 (override)하지 않는 경우, 보기 제어기는 다른 수단을 사용하여 nib 파일에 대해 을 검색합니다. 구체적으로 말하면, 적절한 이름 (.nib 확장자 없음)을 가진 펜촉을 찾고, 뷰가 요청 될 때마다 nib 파일 을로드합니다. 구체적으로는 다음과 같은 이름 중 하나와 펜촉 파일 (순서대로) 같습니다

  1. 뷰 컨트롤러 클래스 이름은 MyViewController 같이 단어 "컨트롤러"로 끝나는 경우는 nib 파일을 찾습니다 그의 이름은 MyView.nib처럼 "컨트롤러"라는 단어가없는 클래스 이름과 일치합니다.
  2. 이름이 뷰 컨트롤러 클래스의 이름과 일치하는 nib 파일을 찾습니다. 예를 들어 클래스 이름이 MyViewController이면 MyViewController.nib 파일을 찾습니다. 의 UIViewController의 문서에서

nibName

에서

하지만 ... 실제로 NSBundle는 내부 자원을 찾기위한 꽤 스마트 규칙이 더 많은 것이이된다. Here is the documentation page describing these rules (iOS의 기기 관련 리소스 참조).

번들 리소스에 적용 할 수있는 모든 수정 자 (기본 패턴)를 설명하는 to this page을 가져옵니다 (이미지 파일 이름 일치와 관련된 링크라고 생각합니다).

+0

그 링크를 읽는 중 ... NIB 파일에 대한 특정 규칙이 있습니까? 그들은 모든 리소스 (링크 1)에 대한 "기본"규칙을 상속하지만 추가 규칙은 없습니다 (링크 2) - 정확합니까? – Adam

+0

맞습니다. 추가 할 수있는 또 하나의 점은 현지화에 기반한 nib 파일의 '스마트 한'로드입니다. 이것은 정말 흥미로운 주제이므로 더 많은 정보를 추가 할 수있는 사람은 누구나 환영 할 것입니다. – Alladinian

관련 문제