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

-(void)testFunction {

NSLog(@"ABC Test");

}

但不能通过 self 作为函数调用 NSString。

谢谢

于 2012-11-23T12:15:47.153 回答
0

在我看来,不可能将“NSString”作为方法名称。

但是,您可以进行条件检查,以便选择必须执行的正确方法。

于 2012-11-23T12:39:14.643 回答
0
Nsstring *newNsstring;
int *YourInt;

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

那么您只能编辑您的新NSString 方法,但我认为您不能将其设为您的方法名称

于 2012-11-23T12:54:11.123 回答
0

如果可以

NSString *stringMethode = @"MyMethodName"
SEL mySelector = NSSelectorFromString(stringMethode);

if([self respondsToSelector:mySelector]){

    [self performSelector:mySelector withObject:nil];

}else{
    //error not method
}

- (void)MyMethodName
{
    //call methode :)
}

祝你好运 ;)

于 2013-09-26T15:09:47.210 回答