2013-10-17 1 views
3

previous postUIViewControllers 지정 초기화 자 initWithCoder 다음은 프로토콜 방법으로 전달 된 인수 aDecoder에 대한 또 다른 질문이 있습니다.initWithCoder 메소드의 aDecoder가 코코아 터치에서 무엇을합니까?

@implementation WhereamiViewController 

- (id)initWithCoder:(NSCoder *)aDecoder //we're overiding the superclasses (UIViewController) inititalizer 
{ 
    self = [super initWithCoder:aDecoder]; 

    if (self){ 
     //create location manager object 
     locationManager = [[CLLocationManager alloc] init]; 

     //there will be a warning from this line of code 
     [locationManager setDelegate:self]; 

     //and we want it to be as accurate as possible 
     //regardless of how much time/power it takes 
     [locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 

     //tell our manager to start looking for its location immediately 
     [locationManager startUpdatingLocation]; 
    } 

    return self; 
} 

aDecoder 그래서 내 코드는 여전히 작동 것 그것은했다 있는지 확인하기 위해 이름을 변경에 대해 궁금했다 : 여기

문제의 코드입니다. 내가 알고 싶은 것은 정확히 initWithCoder에 인수로 전달되는 것입니다. 내 코드에는 아무 것도없는 것 같습니다. 인수는 메소드의 일부일 뿐이지, 주목할 만하지 만 표시되어야합니다. 다른 경우에는 다음과 같이 지정한 초기화자를 만들었습니다.

self = [super init] 

init은 NSObjects로 지정된 이니셜 라이저 오른쪽입니까?

이것은 내가 이해하지 못하는 코드의 유일한 부분입니다. 내 슈퍼 클래스 이니셜 라이저를 호출 한 다음 추가 사용자 지정 코드를 사용하여 구현하거나 self (whereamiviewcontroller) 값으로 만듭니다.

나는 마커를 설정하고 로그에서 내 눈을 사로 잡을 지 알았지 만 운이 없었다. 사전에

감사
감사

+0

설명서를 읽었습니까? 'NSCoding' 프로토콜에 대한 문서를보십시오. – rmaddy

+0

나는 꽤 많은 시간을 보내고 아마도 나는 뭔가를 놓쳤다. NSCoding에는 두 가지 메소드가 있으며 그 중 하나는 initWithCoder입니다. 그것은 aDecoder가 객체의 unarchiver다는 것을 말한다. – LondonGuy

답변

1

당신이 펜촉 또는 스토리 보드에서 뷰 컨트롤러 인스턴스를 초기화 할 때 당신은 행동의 -initWithCoder: 방법을 볼 수 있습니다. 이 경우 코코아 터치는 인스턴스를 사용하여 -initWithCoder: 이니셜 라이저로 xml에서 컨트롤러 요소를 디코딩합니다.

+0

컴파일러가이 줄에 도달하면 내 로그에서 aDecoder의 값으로 UINibDecoder가 설정되어 있습니다. self = [super initCoder : aDecoder] ;. 인수로서 initWithCoder에 무엇이 전달되고 있습니까? 확실히 이것은 뒤에서 일어나고 있습니다. – LondonGuy

+0

@LondonGuy 예, 'UINibDecoder'는 NSCoder 클래스를 기반으로 한 개인 클래스이므로 마법이 범위를 벗어납니다. 하지만 좀 더 깊이 들어갈 수있는 런타임 탐색 결과가 있습니다. https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UINibDecoder.h – voromax

관련 문제