実行時にクラスからすべてのメソッドをログに記録するための新しい関数を作成しました。実行時に引数を記録する方法は?
私が持っている問題は、この行である:
id value = va_arg(stackFrame, id);
は、引数内のオブジェクトの型を変換しません。
私が間違っていることはありますか?これを行う別の方法がありますか?
void DebugArguments (id self, SEL _cmd,...)
{
id receiver = self;
SEL receiverSelector = _cmd;
va_list stackFrame;
va_start(stackFrame, _cmd);
NSMethodSignature *signature
= [receiver methodSignatureForSelector:receiverSelector];
NSUInteger count = [signature numberOfArguments];
NSUInteger index = 2;
for (; index < count; index++)
{
id value = va_arg(stackFrame, id);
if (!value)
{
NSLog(@"Arguments: %@",value);
}
}
va_end(stackFrame);
}
あなたが求めていることは本当にはっきりしていません。関連性のない非常に多くのコードが含まれていることは間違いありません。コードの量を減らし、コードが現在行っていることを正確に説明してください間違って、何をしたいのか – JosephH
私は、次のようなクラスからInitDebug関数を呼び出します。 - (void)MyTest:(NSString *)string { InitDebug(self、_cmd); \t } MyTestメソッドから引数文字列を記録したいと考えています。 – Willy
「value」の結果のタイプは何ですか?何を期待しましたか? –