2013-07-20 2 views

답변

0

rootViewController이입니다 ...

- (BOOL)application:(UIApplication *)application 
     didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    CoursesTableViewController *cvtc 
     = (CoursesTableViewController *)self.window.rootViewController; 

왜 난 그냥이 작업을 수행 할 수 없습니다 ...이 예에서와 같이 타입 캐스트를 사용해야 할 유형 UIViewControllerUIWindow의 특성.

유형에 해당하는 속성 및 선택기와 상호 작용하려면 컨트롤러 유형으로 변환해야합니다.

+0

첫째, 감사합니다! 제 질문은 스토리 보드에 클래스를 설정했기 때문에 appDelegate가 이미 컨트롤러 유형을 알고 있지 않습니까? – user2502232

+0

방법이나 속성 정의를 동적으로 변경할 수있는 방법이 없습니다. –

+0

대단히 감사합니다. – user2502232

2

당신이하는 일은 다운 캐스팅입니다. 다형성 (polymorphism)은 특정 클래스의 객체에 대한 포인터를 그 클래스의 서브 클래스의 객체에 대한 포인터로 할당 할 수 있기 때문에 가능합니다 (그러나 viceversa는 포인터가 실제로 포인터를 가리키고 있지 않기 때문에 그렇게해야합니다. 그 서브 클래스에 속하는 객체, 대신에 반대의 경우는 이것이 보증된다).

@property(nonatomic, retain) UIViewController *rootViewController; 

당신이 유형 UIViewController의의 참조처럼, 그리고 CoursesTableViewControllerUIViewController의 서브 클래스 :

이것은 당신이 전화하고있는 UIWindow 속성입니다.

PS : 내가 컴파일러 경고를 피하기 위해 필요하다고 말했을 때.

+1

PS로 해결 했으므로 -1을 제거합니다. – Peres

0

실제로 그렇게 할 수 있습니다. 한 가지만 기대하고 다른 것을보고 있기 때문에 경고 만합니다. 당신이 캐스팅 할 때 컴파일러에게 당신이하는 일이 무엇인지를 알리는 방법 일뿐입니다.

그것의 유형 : 빠른 응답 모든

enter image description here

+0

먼저 빠른 답변을 보내 주셔서 감사합니다! 제 질문은 스토리 보드에 클래스를 설정했기 때문에 appDelegate가 이미 컨트롤러 유형을 알고 있지 않습니까? – user2502232

+0

rootViewController는'CoursesTableViewController'가 아닌'UIViewController'를 기대하고 있습니다. 그것이 그가하는 방식대로 행동하는 이유입니다. 형변환은 모든 것에 대한 해답이 아니지만,이 경우에는 의미가 있습니다. – Peres

+0

확인. 나는 그것을 몰랐다. 실수로 rootViewController가 자동으로 스토리 보드의 클래스 선택에서 유형을 얻은 것으로 가정합니다. 다시 한 번 감사드립니다! – user2502232

관련 문제