저는 현재 특정 정부 지침 (의료 및 웰빙 문구)으로 인해 앱에서 언어를 변경해야하는 클라이언트를 돕고 있습니다. 그들의 애플 리케이션은 거대하고 모든 문자열은 코드에 포함되어 있습니다 (stringWithFormat/hardcoded), 그것의 아무 것도 외부 테이블에 있습니다. 이것은 거대한 수작업 일 것입니다.NSString 하위 클래스 또는 래퍼 클래스 또는 범주
미래에 결정되지 않은 시점에서 고객은 현재 문언으로 돌아 가기위한 승인을받을 것으로 생각하고 문자열을 다시 전환하려고합니다. 변화의 대부분은 말 그대로 문제가되는 단어 하나를 문제가 적은 단어로 바꿔 놓을 것입니다.
필자는 부울 스위치를 기반으로 런타임에 문자열을 변경할 수 있으면 관련 수동 작업을 제거하고 필요시 언어를 다시 전환 할 수 있다고 생각했습니다.
첫 번째 시도 : 내가 먼저 신속하게 문제가있는 단어를 대체 할 stringWithFormat을 재정의 할 범주를 구분
+ (instancetype)stringWithFormat:(NSString *)format, ...
{
va_list args;
va_start(args,format);
//todo check flag if we're changing the language
//todo replace problematic word from 'format'
NSString *result = [NSString stringWithFormat:format,args];
return result;
}
. stringWithFormat의 원래 구현을 잃어버린다는 사실을 잊어 버렸습니다. 이로 인해 끝없는 재귀가 발생했습니다.
다음 시도 (서브 클래스) :
나는있는 NSString를 서브 클래 싱하기위한 시도를 시작했지만 내 솔루션은 클래스 클러스터를 서브 클래스 인 경우 클래스 클러스터를 서브 클래 싱하기 때문에 나는 내 문제를 이해하지 않았다고 말하는 유래의 골대에 맞았습니다 거의 끝나지 않았다.
마지막 옵션 (래퍼) :
내 마지막 시도가 래퍼 클래스하지만 패배 수동으로 응용 프로그램의 각 문자열을 찾는 것을 피하기 위해했던 원래 목적의 종류를 작성하는 것입니다.
저는이 문제에 대해 더 이상 어떻게 접근해야하는지 잘 모르겠습니다. 핵심 클래스 중 하나에 기능을 추가/재정의해야 할 경우 어떻게해야합니까?
관련 : [있는 NSArray 또는 다른 클래스 클러스터 원숭이 패치 방법은 없나요 또는 스위 즐링 (swizzle)?이 솔루션은 그러나 일 대부분의 경우 (http://stackoverflow.com/q/11751473) –