iOS将方法名称添加到NSDictionary并在之后调用它

时间:2014-05-28 06:17:34

标签: ios objective-c nsdictionary

我正在尝试这件事,但似乎无法做到正确..我有NSMutableDictionary名为 dataDictionary 2 KeyValue 对, IdMethodName

NSMutableDictionary *dataDictionary = [[NSMutableDictionary alloc] initWithCapacity:1];
[dataDictionary setValue:@"1.0" forKey:@"Id"];
[dataDictionary setValue:@"myMethod" forKey:@"MethodName"];

虽然我的方法是

-(void)myMethod{ … }

所以我需要做的是获取方法名称[dataDictionary valueForKey:@"MethodName"];并调用该方法......

任何帮助都会很棒..提前感谢

3 个答案:

答案 0 :(得分:3)

您可以使用NSSelectorFromStringNSStringFromSelector

将其存储为NSString

或类似于NSValue

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: 
                       [NSValue valueWithPointer:@selector(foo)], @"foo",
                       nil];

SEL aSel = [[dict objectForKey:@"foo"] pointerValue];

更多信息: Add method selector into a dictionaryStore 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];
}