에서 선택하여 카테고리 메서드를 호출 할 수 없습니다 문제는 범주의 메서드가 호출되지 않으며 문제를 찾을 수 없다는 것입니다. 어떤 도움이 필요합니까?내가하는 방법이 메인 클래스
답변
하나의 문제는이 방법을 재정의하지 않는다는 것입니다. 선택기가 동일합니다 (나는 믿습니다) - @selector (showModalFromController :),하지만 방법은 아닙니다. 하나는 리턴 유형이 다르며 또 하나는 클래스 메소드 ('+'로 시작)이고 한 번은 인스턴스 메소드 ('-'로 시작)입니다.
당신은 교체 방법은 서명이 있는지 확인해야합니다
+ (id) showModalFromController: (UIViewController*) controller
오히려
- (void) showModalFromController: (UIViewController*) controller
보다 당신이 이것을 정리하면, 당신은 한 걸음 더 가까이있어.
위에서 rmaddy가 주석을 달았으므로, 카테고리를 사용하여 메소드를 무시하고 싶지는 않을 것입니다.
동작을 바꾸려면 해당 서브 클래 싱을 고려하고 필요한 곳에서 새 서브 클래스를 사용하십시오.
무언가 쓸데없는 일을하려는 경우 - 애플리케이션 전체에서이 방법을 바꾸는 것이 좋습니다.이 방법을 매우 신중하게 고려해야합니다.
당신은 어떤 카테고리인지 오해했습니다. 카테고리는 하위 클래스가 아닙니다. "main class"에 대한 참조가 잘못되었습니다. 범주는 가독성을 위해 소스 코드를 분해하거나 이미 돌로 설정된 클래스를 확장하는 기능을 제공합니다.
즉, 모든 카테고리에서 모든 소스를 가져 와서 동일한 @implementation
블록 (그룹 일관성을 위해 #pragma mark -
으로 구분 될 수 있음)에 넣으면 논리적으로 정확해야합니다.
@implementation SomeClass
+ (id) showModalFromController: (UIViewController*) controller
{
AxEmpAuthorizationController * autorizationController = [[self.class alloc] initWithNibName:NSStringFromClass(self.class) bundle:nil];
[autorizationController performSelectorOnMainThread: @selector(showModalFromController:) withObject: controller waitUntilDone: YES];
return [autorizationController authorelease];
}
@end
@implementation SomeClass (MyCategory)
- (void) showModalFromController: (UIViewController*) controller
{
NavigationTopViewController* navigationController = [[NavigationTopViewController allocWithZone: NULL] initWithRootViewController: self];
[controller presentModalViewController: navigationController animated: ![self.class isMain]];
[navigationController release];
}
@end
이로 : 당신이 작성한 코드에서 변환
@implementation SomeClass
+ (id) showModalFromController: (UIViewController*) controller
{
AxEmpAuthorizationController * autorizationController = [[self.class alloc] initWithNibName:NSStringFromClass(self.class) bundle:nil];
[autorizationController performSelectorOnMainThread: @selector(showModalFromController:) withObject: controller waitUntilDone: YES];
return [autorizationController authorelease];
}
#pragma mark - MyCategory
- (void) showModalFromController: (UIViewController*) controller
{
NavigationTopViewController* navigationController = [[NavigationTopViewController allocWithZone: NULL] initWithRootViewController: self];
[controller presentModalViewController: navigationController animated: ![self.class isMain]];
[navigationController release];
}
@end
당신은 같은 클래스에 같은 이름을 가진 두 개의 선택기를 정의하여 선택 이름을 오용하고 있습니다. 정적 메서드를 재정의하려면 하위 클래스를 사용해야합니다. 같은 클래스에 다른 메소드를 원하면 다른 선택기 이름을 사용하십시오.
- 1. 제네릭 내가하는 방법이 기본 클래스
- 2. 유사한 내가하는 방법이
- 3. 내가하는 방법이 방법
- 4. JQuery와 내가하는 방법이
- 5. 내가하는 방법이 장고 쿼리
- 6. 자바 : 내가하는 방법이 방법
- 7. 내가하는 방법이 어떻게 날짜가
- 8. 내가하는 방법이 배열
- 9. Grails는 내가하는 방법이 문자열
- 10. 어떻게 내가하는 방법이
- 11. 로 SOAP 방법에서 결과를받을 내가하는 방법이 다른 클래스
- 12. 메인 클래스
- 13. 정적 메인 클래스 - AS3
- 14. ASP.net 분석 Diffgrams 내가하는 방법이 DataList에
- 15. 블록은 내가하는 방법이 코드가 중첩 된 블록
- 16. 내 사용자 컨트롤에서 내가하는 방법이 반사
- 17. 내가하는 일을 성취하기위한 올바른 방법이 있습니까?
- 18. 메인 클래스 또는 ContactInfromation 클래스
- 19. C# 메인 정적 클래스
- 20. 메인 클래스 객체 파괴하기
- 21. 메인 루프의 클래스 메소드?
- 22. java - 누락 메인 클래스
- 23. 메인 클래스 프로젝트 실행
- 24. 메인() 하위 클래스 내에서
- 25. 메인 클래스 찾기
- 26. 클래스 찾을 수 없음 내가하는 java.awt.Frame
- 27. 스칼라 - 라이브러리에서 메인 클래스 실행하기
- 28. 메인 클래스에서 서브 클래스 호출하기
- 29. Java 메인 클래스 Apache Maven
- 30. 메인 클래스 변수에 액세스하는 C++ 서브 클래스
범주를 사용하여 Objective-C의 메서드를 재정의하지 마십시오. 그것은 정의되지 않은 행동이며 아마도 희망대로 작동하지 않을 것입니다. – rmaddy