私はそれを解決しました。
- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)ext inDirectory:(NSString *)subpath;
Iたら:私は1クアルコム使用しているが、見つけるまで
まず私は、NSBundleのカテゴリを作成し、バンドルからロードするファイルに関連するほとんどすべてのメソッドの新しい実装を作成しました
Swizzle([NSBundle class], @selector(pathForResource:ofType:inDirectory:), @selector(pathForResourceOverride:ofType:inDirectory:));
:メソッドのスウィズリングの魔法によって、その後
#define XFILPATH4DOCUMENT(_value) [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:_value]
- (NSString *)pathForResourceOverride:(NSString *)name ofType:(NSString *)ext inDirectory:(NSString *)subpath
{
if (([name isEqualToString:@"config"] && [ext isEqualToString:@"xml"]) || ([name isEqualToString:@"qcar-resources"] && [ext isEqualToString:@"dat"]))
{
// OMG
NSString *fileName = [NSString stringWithFormat:@"%@.%@", name, ext];
NSString *path = XFILPATH4DOCUMENT(fileName);
NSLog(@"%@", path);
return path;
}
else
{
return [self pathForResourceOverride:name ofType:ext inDirectory:subpath];
}
}
:私はあることを私のカテゴリの方法を変更し、ということでした
#import <objc/runtime.h>
#import <objc/message.h>
void Swizzle(Class c, SEL orig, SEL replacement)
{
Method origMethod = class_getInstanceMethod(c, orig);
Method newMethod = class_getInstanceMethod(c, replacement);
if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod)))
class_replaceMethod(c, replacement, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
else
method_exchangeImplementations(origMethod, newMethod);
}
私はここの回答から得た:Method Swizzle on iPhone device
怖い
このメソッドを使用していますか?はい。
しかし、それは動作します。
私はまったく同じことに直面しています。 これらの機能とスウィズルをどこに置いたらいいのでしょうか? NSBundleを上書きするようですか?どうもありがとう! –
QCAR/Viewforia SDKでこれを行うためのサポートが追加されたので、これを見ている人にとっては、これはもう必要ありません。 – tomwilson