3

こんにちは私はパラメータとしてセレクタを持っているObjective-Cメソッドを作ろうとしています。しかし、「認識されないセレクターがインスタンスに送信されました」というエラーメッセージが表示され続けます。私は次のことをしています:

これは、セレクターパラメーターを使用したメソッドです。

-(void)createURL: (SEL) selector{ 
dispatch_sync(kBgQueue,^{
NSData* data = [NSData dataWithContentsOfURL: wcfURL];
    [self performSelectorOnMainThread:@selector(selector)
                           withObject:data waitUntilDone:YES];


});
}

これは私がセレクターになりたい方法です:

-(void)fetchedUserType:(NSData *)responseData{

NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData
                                                     options:kNilOptions
                                                       error:&error];

userType = [json objectForKey:@"getUserTypeResult"];
}

これが私のメソッドを呼んでいるところです:

- (void)viewDidLoad
{
[super viewDidLoad];
NSString *url = [NSString stringWithFormat:@"http://10.211.55.3:1234/Service1.svc/getUserType/%@", userEmail];
wcfURL = [[NSURL alloc]initWithString:url];
SEL sel = NSSelectorFromString(@"fetchedUserType:");
[self createURL:sel];

}

4

1 に答える 1

4

編集1:

あなたのエラーはここにあります:

 [self performSelectorOnMainThread:@selector(selector)
 ----------------------------------^^^^^^^^^^^^^^^^^^^

selector@selector(はすでにセレクターであり、あなたはそれを再び)に入れています。

そのはず

 [self performSelectorOnMainThread:selector withObject:data waitUntilDone:YES];

編集0:

あなたのコードは正しいです。また、SELメソッドが現在のクラスに見つからない場合にのみエラーが発生します。

以下のコードのように、メソッド名sumaddこれに変更すると、同じエラーがスローされます。

-(void)sum{
    NSLog(@"sum");
}

-(void) createURL: (SEL) selector{
    [self performSelector:selector];
}

- (IBAction)total:(id)sender {
    SEL sel = NSSelectorFromString(@"sum");
    [self createURL:sel];
}

また、メソッドのシグネチャも満たす必要があります。メソッドが1つの引数を取る場合は、1つだけ送信する必要があります。

-(void)sum:(id)integer{
    NSLog(@"sum:%ld",[integer integerValue]);
}

-(void) createURL: (SEL) selector{
    //NSData* data = [NSData dataWithContentsOfURL: nil];
    //[self performSelectorOnMainThread:@selector(selector) withObject:data waitUntilDone:YES];

    [self performSelector:selector withObject:@(12)];
}

- (IBAction)total:(id)sender {
    NSInteger total=0;

    for (id element in self.arrayController.arrangedObjects) {
        total += [element firstNumber]*[element secondNumber];
    }
    [self.label setStringValue:[NSString stringWithFormat:@"%ld",total]];


    SEL sel = NSSelectorFromString(@"sum:");
    [self createURL:sel];

}
于 2013-03-11T17:11:54.703 に答える