1

要件があります。他のクラスからメソッドを呼び出す必要がありますが、メソッド名は次のようにさまざまなアクションで変更されます。

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]; この部分はObjective-Cでは許可されていません。

ありがとう

4

3 に答える 3

1

使用できます[self performSelector:<#(SEL)#> withObject:<#(id)#>];

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

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

パラメータ付きメソッド、

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

for (NSString *method in selectorArray) 
{
     [self performSelector:NSSelectorFromString(method) withObject:@"test"];
}
于 2012-04-09T06:03:48.793 に答える
1

NSSelectorFromString文字列を に変換してSELから、-[NSObject performSelector:]またはNSInvocationメソッドを呼び出すために使用します。

または、可能であればKey-Value Codingを使用します。

于 2012-04-09T06:04:31.007 に答える
0

機能を使用できますNSSelectorFromString

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

セレクターの詳細については、ドキュメントを参照してください。

于 2012-04-09T06:04:13.073 に答える