我正在尝试这件事,但似乎无法做到正确..我有NSMutableDictionary
名为 dataDictionary 的 2 KeyValue 对, Id
和MethodName
NSMutableDictionary *dataDictionary = [[NSMutableDictionary alloc] initWithCapacity:1];
[dataDictionary setValue:@"1.0" forKey:@"Id"];
[dataDictionary setValue:@"myMethod" forKey:@"MethodName"];
虽然我的方法是
-(void)myMethod{ … }
所以我需要做的是获取方法名称[dataDictionary valueForKey:@"MethodName"];
并调用该方法......
任何帮助都会很棒..提前感谢
答案 0 :(得分:3)
您可以使用NSSelectorFromString或NSStringFromSelector
将其存储为NSString
或类似于NSValue
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
[NSValue valueWithPointer:@selector(foo)], @"foo",
nil];
SEL aSel = [[dict objectForKey:@"foo"] pointerValue];
更多信息: Add method selector into a dictionary, Store selector as value in an NSDictionary
答案 1 :(得分:1)
NSString *myMethodInStringFormat=[dataDictionary valueForKey:@"MethodName"];
SEL mySelector=NSSelectorFromString(myMethodInStringFormat);
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
if (mySelector!=nil) {
[self performSelector:mySelector];
}
#pragma clang diagnostic pop
答案 2 :(得分:0)
在" Vijay-Apple-Dev.blogspot.com"的答案的帮助下,对它进行了一些修改以解决警告..
NSString *myMethodInStringFormat = [dataDictionary valueForKey:@"MethodName"];
SEL mySelector = NSSelectorFromString(myMethodInStringFormat);
if (mySelector!=nil) {
[self performSelector:mySelector withObject:nil afterDelay:0.0];
}