2011-08-22 1 views
0

NSClassFromString()을 사용하여 어떤 클래스가 nav 컨트롤러에 푸시되는지 결정할 문자열을 전달하려고합니다. 문제는 NSObject가 UIViewController 유형 클래스가 아니기 때문에 뷰 컨트롤러를 밀어 넣으려고하는 것뿐만 아니라 오류를 발생시키는이 클래스에 값을 전달하고 싶습니다.Objective-C : NSClassFromString() 내비게이션 컨트롤러와 함께 사용 하시겠습니까?

Class screenClass = NSClassFromString(screen.name); 
NSObject* newClass = [[screenClass alloc] init]; 
newClass.asset = asset; // Causes errors because asset not in NSObject 
[self.navigationController pushViewController:newClass animated:YES];// newClass is an NSObject 
[newClass release]; 

내가 여기서 시도한 것을 수행하는 더 좋은 방법이 있습니까?

답변

1

변수를 정적으로 입력 할 수없는 경우 점 표기법을 사용할 수 없습니다. 모든 가능한 모든 클래스가 메서드를 선언하는 하나의 공통 클래스에서 파생 된 경우 해당 클래스로 정적으로 입력 할 수 있습니다. 그렇지 않으면, 당신은 asset 속성에 대한 접근 방법을 사용해야합니다 :

Class screenClass = NSClassFromString(screen.name); 
id newClass = [[screenClass alloc] init]; // note that it's an id to indicate that we don't know what it'll be more specifically than an object 
[newClass setAsset:asset]; 
[self.navigationController pushViewController:newClass animated:YES]; 
[newClass release]; 

이 (정상적으로 될 것이다)에 asset 속성에 대한 세터 setAsset: 있다고 가정합니다.

+0

이제 이것이 내가 말하는 것입니다! 완벽하게 일했습니다! –

2

당신은 단순히 경고가 제거됩니다 다음

UIViewController *newObject = (UIViewController *)[[screenClass alloc] init]; 

을 할 수 있습니다.

+0

이것은, 또는 property 대신에 - setAsset : method를 사용합니다. –

관련 문제