2013-03-11 2 views
2

Привет Я пытаюсь создать объект-метод, который имеет селектор в качестве параметра. Но я продолжаю получать сообщение об ошибке «непризнанный селектор, отправленный в экземпляр». Я делаю следующее:Как создать метод с параметром селектора

это метод с параметром селекторного:

-(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]; 

}

ответ

3

EDIT 1:

Ваша ошибка здесь:

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

selector уже селектор, и ваш помещаете его в @selector() снова.

Это должно быть

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

Edit 0:

Ваши коды правильно. И вы получаете ошибку только , когда ваш метод SEL не найден в текущем классе.

Как и в приведенном ниже коде, если я изменю имя метода sum на add, это приведет к такой же ошибке.

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

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

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

Кроме того, вы должны встретить сигнатуру метода, а также. Если ваш метод принимает один аргумент, вам нужно отправить ровно один.

-(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]; 

} 
+0

, но это все в одном классе, и я получаю сообщение об ошибке – megara

+1

ваше имя селектора 'nameOFmyMethodSelector:' так г у, что вы передать параметр тоже? –

+0

Иными словами, в том числе двоеточие в конце означает, что вы также передаете параметр. Существует разница между 'nameOFmyMethodSelector:' и 'nameOFmyMethodSelector' – MikeS

Смежные вопросы