NSClassFromString
을 통해 클래스를 초기화 할 수 없습니다. 클래스의 인스턴스를 반환하지 않으면 Class 객체를 반환합니다. 이 클래스는 클래스를 식별하는 데 도움이되는 Objective C 기능입니다. 루트보고 컨트롤러로 설정하려는 변수가보기 컨트롤러가 아니기 때문에보기 컨트롤러 메소드에 응답 할 수 없으므로이 오류가 발생합니다. 클래스는 자체 이니셜 라이저를 사용하여 초기화됩니다.
예 : 다른 이니셜 라이저를 사용하여 펜촉/스토리 보드를 사용하는 경우
MyViewController* vc = [[MyViewController alloc] init];
또는 : 당신이 달성하기 위해 노력하고 무엇을 위해
MyViewController* vc = [[MyViewController alloc] initWithNibName: @"myNib" bundle: nil];
또는
MyViewController* vc = (MyViewController*)[[UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"MyViewControllerIdentifier"];
을, 당신은해야합니다 저장 한 클래스를 기반으로로드 할 클래스를 파악하는 일부 논리.
예컨대 클래스 등, 서브 클래스 재사용 할 수 있기 때문에
Class c = NSSClassFromString(@"MyClass"
if ([MyViewController class] == c) {
//load MyViewController, e.g. using init or instantiate from storyboard etc
}
else if ([MyOtherViewController class] == c){
//load MyOtherViewController
}
//etc
그러나, 식별자 (당신이 원하는대로 정수, 문자열,)와 같은 몇 가지 값을 정의하고 대신 클래스 이름의 사람을 저장 더 나을 수 있습니다 또한 앱의 모든 단일보기 컨트롤러 클래스가 허용되는 시작점이되기를 원치 않을 수도 있습니다. 그렇다면이 NSClassFromString
비즈니스를 피하고 간단한 switch 문이나 논리적 표현 만하면됩니다.
충돌에 대한 자세한 내용을 제공하십시오. 어디서 발생합니까, 뭐라고 말합, 등 – shim
내 코드가 맞습니까? @shim – MGames
@shim NSLog에 대한 나의 편집을 참조하십시오. – MGames