0

myMethod から showUIAlertView を呼び出そうとしていますが、例外が発生します: キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。 「[invocation setTarget:self];」の行で、両方のメソッドが同じファイルにあるため、self と書きました。ありがとう!!

- (void)showUIAlertView:(NSString*)title:(NSString*)message
{
    UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:title
                                                      message:message
                                                      delegate:nil 
                                               cancelButtonTitle:@"OK"
                                               otherButtonTitles:nil];
    [alertView show];
}

- (void)myMethod:(NSString*)someData
{
    //some lines of code
    SEL selector = @selector(showUIAlertView:title:);
    NSMethodSignature *signature = [[self class] instanceMethodSignatureForSelector:selector];
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
    [invocation setSelector:selector];
     NSString *str1 = @"Status Message";
     NSString *str2 = @"You are not a member yet.";
     [invocation setTarget:self];
     [invocation setArgument:&str1 atIndex:2];
     [invocation setArgument:&str2 atIndex:3];
    [NSTimer scheduledTimerWithTimeInterval:0.1 invocation:invocation repeats:NO];

}

4

1 に答える 1

0

エラー メッセージに基づく問題の追跡:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSInvocation invocationWithMethodSignature:]: method signature argument cannot be nil'

セレクターに対して[[self class] instanceMethodSignatureForSelector:selector];返さnilれることを意味します。showUIAlertView:title:なぜ?あなたのクラスは単にセレクターに対応するメッセージを実装していないため、メソッド宣言でラベルと引数名を混同しています。

- (void)showUIAlertView:(NSString*)title:(NSString*)message;

実際には

- (void)showUIAlertView:(NSString*)title title:(NSString*)message;

また、ターゲットをに設定してselfも問題targetありません。これは、セレクター/呼び出しを呼び出すオブジェクトです。

于 2012-09-05T14:45:25.277 に答える