我确定这是一个简单的问题,但是我如何使用[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 :)
}
祝你好运;)