使用 NSString 在 XCode 4.x 中调用函数



我确定这是一个简单的问题,但是我如何使用[self MyFunction]调用函数;其中"MyFunction"是NSString?我想使用各种变量调用函数,这些变量在连接时形成函数名称(即。函数名称 1、函数名称 2 等)

例如(简化):

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

唯一的问题是我收到"可能导致泄漏"消息 - 尽管该应用程序运行良好。

欢迎来到 Stackoverflow Mark。

在Cocoa Touch中,您所说的"函数"称为"选择器"(一种同时具有签名和目标的方法),并且具有自己的类型SEL。为了实现你想要的,你需要首先按名称获取选择器,然后执行它。以下是一些帮助您入门的代码:

-(void) yourMainMethod{
   NSString * methodName = @"calculateAcceleration";
   SEL sel = NSSelectorFromString(methodName);
   [self performSelector:sel];
}
-(void)calculateAcceleration
{
   NSLog(@"Called!");
}

您可以按如下方式使用

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

-(空)测试函数{

NSLog(@"ABC Test");

}

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

谢谢

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

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

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

然后你只能编辑你的新NSString但我认为你不能把它作为你的方法名称

如果可以的话

NSString *stringMethode = @"MyMethodName"
SEL mySelector = NSSelectorFromString(stringMethode);
if([self respondsToSelector:mySelector]){
    [self performSelector:mySelector withObject:nil];
}else{
    //error not method
}
- (void)MyMethodName
{
    //call methode :)
}

祝你好运;)

最新更新