1

これは簡単な質問だと思いますが、 [self MyFunction]; で関数を呼び出すにはどうすればよいですか? 'MyFunction' はどこで NSString ですか? 結合すると関数名を形成するさまざまな変数を使用して関数を呼び出したい (つまり、FunctionName1、FunctionName2 など)。

例(簡略化):

NSString *MyStringValue=@"FunctionName";
int MyNumber = 1;
NSString *MyFunction=[myStringValue stringByAppendingFormat:@"%d ",myNumber];

したがって、次を使用して関数「FunctionName1」を呼び出すことを検討しています。

[self MyFunction];

しかし、それはうまくいきません。誰でも助けることができますか?


編集: これが現在動作する完全なコードです:

-(void)getnewblock {

    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

    NSNumber *actionblockload = nil;
    actionblockload = [standardUserDefaults objectForKey:@"actionblock"];
    int actionblock = [actionblockload intValue];

    NSString *block=@"setblock";
    NSString *blockanimate=@"blockanimate";

    NSString *blocktochange=[block stringByAppendingFormat:@"%d",actionblock];
    NSString *blocktoanimate=[blockanimate stringByAppendingFormat:@"%d",actionblock];

    SEL sel1 = NSSelectorFromString(blocktochange);
    SEL sel2 = NSSelectorFromString(blocktoanimate);

    [self performSelector:sel1];
    [self performSelector:sel2];

    [self setblockimages];
}

唯一のことは、「リークが発生する可能性があります」というメッセージが表示されることです-アプリは正常に動作します.

4

5 に答える 5

6

Stackoverflow マークへようこそ。

Cocoa Touch では、「関数」と呼ばれるものは「セレクター」(シグネチャーとターゲットの両方を持つメソッド) と呼ばれ、独自の型を持ちSELます。目的を達成するには、まずセレクターを名前で取得してから実行する必要があります。開始するためのコードを次に示します。

-(void) yourMainMethod{

   NSString * methodName = @"calculateAcceleration";
   SEL sel = NSSelectorFromString(methodName);

   [self performSelector:sel];

}

-(void)calculateAcceleration
{
   NSLog(@"Called!");
}
于 2012-11-23T12:53:17.010 に答える
0

以下のように使用できます

SEL function = @selector(testFunction);
[self performSelector:function];

-(無効)testFunction {

NSLog(@"ABC Test");

}

ただし、関数として self を介して NSString を呼び出さないでください。

ありがとう

于 2012-11-23T12:15:47.153 に答える
0
Nsstring *newNsstring;
int *YourInt;

newNsstring =[NSString stringWithFormat:@"%@%d",yourNsstringName,yourInt,nil];

その後、新しいものだけを編集できますNSString が、メソッドの名前にすることはできないと思います

于 2012-11-23T12:54:11.123 に答える
0

私の意見では、メソッド名として「NSString」を使用することはできません。

ただし、実行する必要がある適切なメソッドを選択するために、条件付きチェックを行うことができます。

于 2012-11-23T12:39:14.643 に答える