2012-04-09 2 views
1

다른 작업과 방법 이름 변경하지만, 메소드 이름은 다른 동작으로 변경, 뭔가 아래 같은 :목표 - C : 나는 다른 클래스에서 메소드를 호출하는 요구 사항이 필요됩니다

NSArray *arrays = [NSArray arrayWithObjects:@"aaa", @"bbb", nil]; 
for (NSString *array in arrays){ 
blablabla....... 
Aclass *abc = [[Aclass alloc] methodName%@:variable],array; 
blablabla....... 
} 

인가가 Objective-C에 그런 식으로 코드를 작성하는 방법은 없습니까?

감사합니다.

대한 추가 정보 : 는 Aclass에서 메소드 이름과 같은 것입니다 :

-(NSArray *)procWithAAA:(NSInteger)aaaID 

감사합니다!

Aclass에서 메소드 이름과 같은 것입니다 :

- (NSArray를 *) procWithAAA : (NSInteger) aaaID이

가 --------- 너희들의 제안으로, 나는 다음과 같은 코드를 작성 하지만 ------- 작동하지

NSArray *arrays = [NSArray arrayWithObjects:@"aaa", @"bbb", nil]; 
for (NSString *array in arrays){ 

SEL customSelector = NSSelectorFromString([NSString stringWithFormat:@"procWith%@", array]); 

if ([Sync respondsToSelector:customSelector]) { 
         Aclass * abc = [Aclass performSelector:customSelector:aaaID]; 
        }else { 
         NSLog(@"## Class does not respond to %@", customSelector); 
        } 

Aclass * ABC = Aclass performSelector : customSelector : aaaID]; 이 부분은 객관적으로 허용되지 않는다. 당신은 매개 변수 [self performSelector:<#(SEL)#> withObject:<#(id)#>];

NSArray *selectorArray = [NSArray arrayWithObjects:@"abc",@"gcd", nil]; 

for (NSString *method in selectorArray) 
{ 
    [self performSelector:NSSelectorFromString(method) withObject:nil]; 
} 

방법 사용할 수 있습니다

감사

답변

1

,

NSArray *selectorArray = [NSArray arrayWithObjects:@"abc:",@"gcd:", nil]; 

for (NSString *method in selectorArray) 
{ 
    [self performSelector:NSSelectorFromString(method) withObject:@"test"]; 
} 
+0

감사! Aclass에있어서의 이름 등이다 - (NSArray를 *) procWithAAA (NSInteger) aaaID NSArray를 배열 * = [NSArray를 arrayWithObjects의 "BBB"@ "AAA"@ 닐]; 에 대한 (NSString * 배열에 배열) if ([Sync respondsToSelector : customSelector]) { Aclass * abc = [Aclass performSelector : customSelector : aaaID]; } else { NSLog (@ "## 클래스가 % @"에 응답하지 않습니다., customSelector); } 작동하지 않습니다. –

+0

Ok.Instead 클래스 값 속성에 저장하고 액세스 할 수있는 값을 반환합니다. 메서드를 수정하여 무효화 할 수 있다는 뜻입니다. 나는 대안을 찾아 볼 것이다. – Vignesh

+0

NSInvocation.http : // stackoverflow를 사용해야합니다.co.kr/questions/313400/nsinvocation-for-dummies – Vignesh

0

당신은 NSSelectorFromString 기능을 사용할 수 있습니다.

SEL customSelector = NSSelectorFromString(@"selectorName"); 
if ([class respondsToSelector:customSelector]) { 
    [class performSelector:customSelector]; 
} 
else { 
    NSLog(@"## Class %@ does not respond to %@", class, customSelector); 
} 

셀렉터에 대한 자세한 내용은 documentation에서 확인할 수 있습니다.

관련 문제