뷰 컨트롤러를 만들 때 init:
은 언제 사용해야하며 언제 initWithNibName:bundle:
을 사용해야합니까?언제 initWithNibName을 사용하여보기 컨트롤러를 초기화해야합니까?
답변
-initWithNibName:bundle:
은 UIViewController의 지정된 초기화 프로그램입니다. 뭔가 결국 그것을 호출해야합니다. 즉, 애플의 예 (대부분의 경우 유지 관리 가능성을 강조하는 것)에도 불구하고 뷰 컨트롤러 외부에서 절대로 호출해서는 안됩니다.
당신은 종종 다음과 같은 코드가 표시됩니다
MYViewController *vc = [[MYViewController alloc] initWithNibName:@"Myview" bundle:nil];
내가이 올바르지 않습니다 말한다. 구현 세부 사항 (NIB의 이름과 NIB가 사용되었다는 사실)을 호출자에게 전달합니다. 캡슐화가 깨졌습니다. 이 작업을 수행하는 올바른 방법은 다음과 같습니다 그런
MYViewController *vc = [[MYViewController alloc] init];
, MYViewController에 :
는- (instancetype)init
{
self = [super initWithNibName:@"Myview" bundle:nil];
if (self != nil)
{
// Further initialization if needed
}
return self;
}
- (instancetype)initWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle
{
NSAssert(NO, @"Initialize with -init");
return nil;
}
이 객체에 다시 키 구현 세부 사항을 이동하고, 실수로 캡슐화를 깨는에서 발신자를 방지 할 수 있습니다. 이제 NIB의 이름을 변경하거나 프로그래밍 방식으로 이동하면보기 컨트롤러가 사용되는 모든 장소가 아닌 한 곳에서 (보기 컨트롤러에서) 수정됩니다.
에 선택한 답변을 변경해야합니다 그루터기를 모든 빈의 ViewController 클래스, 아직 초기화 방법에 대해? –
클래스 앞에 접두사를 붙이기로되어 있어도 템플릿에 클래스 접두사가 포함되지 않은 것과 같은 이유가 있으며 템플릿은 응용 프로그램 대리인에게 가능한 가장 어둡지 않은 이름을 만듭니다. 이는 수정해야 할 두통입니다. IB는 새로운 ABI에서 ivars를 선언해서는 안되지만 속성을 자동 생성 할 때 ivar 선언을 강요합니다. 템플릿이 항상 최상의 방법은 아닙니다. 대부분의 경우에 다소 효과가있는 가장 일반적인 공통 분모 인 경우가 많지만 어디에서도 특히 잘 나타납니다. 최근 애플의 예제 코드가 개선되고 있지만 아직 갈 길이 멀다. –
만약 당신이 nibs를 클래스와 똑같이 이름 짓는 관행을 따르면,이 코드는 잘 작동합니다.'- (id) init { return [super initWithNibName : NSStringFromClass ([self class]) 번들 : nil]; }' – CharlesA
nib 파일로 초기화하는 경우 initWithNibName을 사용하십시오! 즉, Interface Builder를 사용하여 만든 파일입니다.
IB를 사용하여 뷰를 레이아웃하지 않으면 init 만 사용할 수 있습니다.
nib/xib 파일이 없을 때 init을 사용합니다. UI는 우리가 1 개 이상 펜촉에 의해 펜촉/XIB 또는 동일한 컨트롤러 점유율이있는 경우, initWithNibName를 사용
코딩에 의해 생성/XIB는
내가 무슨 생각if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
} else {
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
}
..
추가하면 당신은 알고 ~ 아이폰 또는 ~ 당신의 펜촉 이름은 그냥 "의 ViewController"@ initWithNibName를 호출 할 수 있고 올바른 하나를 선택합니다 아이 패드. – Darxval
당신은 할 수 있습니다 xib가 View Controller 클래스와 같은 이름을 가진 한 init을 호출하십시오. 캡슐화는 필요하지 않습니다. 이렇게하면 타이핑을 절약 할 수 있지만 선명도가 떨어질 수 있습니다. 번들 :
는NUDMainViewController *mainVC = [[NUDMainViewController alloc] init];
는
- 1. initWithNibName을 사용하면 전혀 변경되지 않습니다.
- 2. 프로그래밍 방식으로 뷰 컨트롤러를 언제 만들어야합니까? 언제 NIB 파일을 사용해야합니까?
- 3. 언제 ASP.NET MVC에서 비동기 컨트롤러를 사용해야합니까?
- 4. 내비게이션 컨트롤러를 언제 다시 사용할 수 있습니까?
- 5. 언제 ASP.NET MVC로 별도의 컨트롤러를 만들어야합니까?
- 6. 언제 Asp.net MVC에 새 컨트롤러를 작성합니까?
- 7. 언제 Rails 앱에서 RESTful 컨트롤러를 사용해야합니까?
- 8. std :: map을 초기화해야합니까?
- 9. AJAX를 사용하여보기 삽입
- 10. 부스트 :: 배열을 어떻게 초기화해야합니까?
- 11. nscoding을 사용하여보기 저장
- 12. MVC의 버튼을 사용하여보기 탐색
- 13. 왜 이것을 초기화해야합니까?
- 14. 어떻게 이것을 초기화해야합니까?
- 15. presentModalViewController로 열린보기 컨트롤러를 닫는 방법 :
- 16. UITabBarController는 개별 탭에서 initWithNibName을 호출하지 않습니까?
- 17. Android에서 onNewIntent의 변수를 다시 초기화해야합니까?
- 18. Beans를 사용하여보기 채우기/가져 오기
- 19. 발신자가 "out"매개 변수를 초기화해야합니까?
- 20. 클래스 또는 생성자에서 멤버를 초기화해야합니까?
- 21. 텍스트를 숨기고 라디오 버튼을 사용하여보기
- 22. JQuery 데이터 테이블을 미리 초기화해야합니까?
- 23. ZF 새 컨트롤러를 만듭니다
- 24. 사용자 정의 애니메이션을 사용하여보기 컨트롤러보기 표시 iOS
- 25. -tabBarController를 사용하여보기 컨트롤러에 메시지 보내기 : didSelectViewController?
- 26. rspec-rails 2.0.0.beta8을 사용하여보기 도우미 조롱하기
- 27. actionresult를 사용하여보기 및 부분보기 모두를 반환하는 방법
- 28. Model 클래스의 복합 속성을 항상 초기화해야합니까?
- 29. 어떻게하면 C++에서 C 구조체를 제대로 초기화해야합니까?
- 30. 자바 스크립트를 사용하여보기 영역의 높이 감지
당신은 XCode4가 initWithNibName을 생성 않는 이유를이 질문이 의도 된 방식 인 경우 – Eric