소스가없는 Objective C 클래스의 메서드를 재정의하고 싶습니다.Objective C 범주에서 Super를 사용하고 있습니까?
나는 그것을 조사해 보았고, 카테고리는 내가 이것을 할 수 있도록해야한다고 생각하지만, 나의 새로운 방법에서 이전 방법의 결과를 사용하고 싶다. 이전 방법 결과를 얻기 위해 super를 사용한다.
이 방법을 시도 할 때마다 내 메서드가 호출되지만 "슈퍼"는 아무 것도 아닙니다 ... 어떤 이유가 있습니까? XCode 2.2 SDK로 iPhone 개발을하고 있습니다. 나는 확실히 클래스의 인스턴스를 다루고 있는데, 클래스의 메소드는 인스턴스 메소드이다.
@implementation SampleClass (filePathResolver)
-(NSString*) fullPathFromRelativePath:(NSString*) relPath
{
NSString *result = [super fullPathFromRelativePath: relPath];
... do some stuff with the old result
return result;
}
참고 및 설명 : Apple Docs에서 볼 수 있듯이 이것이 허용되어야합니다. 카테고리 상속 된 메소드를 재정의 할 때
Categories docs at developer.apple.com: 는 카테고리에있어서, 평소와 같이, 슈퍼에 메시지 통해 상속 구현을 호출 할 수있다. 그러나 카테고리 이 카테고리의 클래스에 이미 이있는 메소드를 덮어 쓰는 경우 은 원래 구현을 호출 할 수 없습니다.
혹시이 문제를 해결하기위한 방안을 찾으셨습니까? UILabel의 setText : 메소드에 전달 될 때 텍스트 매개 변수를 수정하려고합니다. UILabel (거대한 코드베이스)을 서브 클래스하고 싶지 않기 때문에 Category가 가장 적절할 것입니다. 슈퍼 오브젝트가 실제로 UILabel 인 경우 super setText를 호출하면 트릭을 수행 할 수 있다고 생각하지만, 카테고리에 정의 된 setText :를 호출하는 무한 루프로 이어질 가능성이 큽니다. 따라서 이것은 아마도 카테고리에 대한 불가능한 묘기 일 것임을 분명히합니다. –
안녕하세요! 나는이 페이지에 게시 된 것보다 다른 해결책을 찾지 못했습니다. 메서드 swizzling 또는 카테고리에 다른 메서드 사용 - –