@vikingosegundo が提供する公式の方法で動作させることができない場合は、創造的なエンジニアリング (創造的なもの、ああ、危険です) を使用してこれを行うことができます。誤ってオーバーライドしたときにこのメソッドを発見しました[NSBundle localizedStringForKey:value:tableName:]
。
1) 次の方法でカテゴリを NSBundle に追加します。
#import <objc/runtime.h>
+ (void) load {
Method original, swizzled;
original = class_getInstanceMethod(self, @selector(localizedStringForKey:value:table:));
swizzled = class_getInstanceMethod(self, @selector(swizzled_localizedStringForKey:value:table:));
method_exchangeImplementations(original, swizzled);
}
- (NSString*) swizzled_localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName {
NSLog(@"Key: %@. Value: %@", key, value);
return [self swizzled_localizedStringForKey: key value:value table:tableName];
}
2) キー/値を単純にログに記録する場合は、if ([key isEqualToString: xxx] ) ブロックを配置します。そこでは、次のキー値 (少なくとも一部) をキャッチする必要があります: 切り取り、コピー [メニュー]、選択、すべて選択、貼り付け、削除 [メニュー]、置換...、定義、話す、一時停止。これらは、そこに表示されるデフォルト値です。
3) 値をキャッチしたら、カスタム テーブルを検索するか、ハードコードされた値を使用できます。カスタム テーブルを検索する場合は、カスタム テーブルでの無限ループを回避するために、swizzled メソッドにキャッチがあることを確認してください。
NB: なぜスウィズルが必要なのですか? これは、アプリのすべての Apple テキストを上書きするためです。他のすべての文字列のデフォルトが必要になるため、興味のない文字列のデフォルトを取得するには、スウィズルする必要があります。
幸運を。ポール