我有一个包含结构的xml文件.在这个结构中,我有Actions节点.因此,在Actions节点下,有多个“Action”节点,每个节点都有Value和Name属性. 例如 ?xml version="1.0" encoding="ISO-8859-1"?Testcases SuiteName="Ca
例如
<?xml version="1.0" encoding="ISO-8859-1"?> <Testcases SuiteName="CalculatorActions"> <Testcase id="101" Name="testAddFunction"> <Setup/> <TearDown/> <Test> <Action Name="Enter first operand" Type="input" Value="5"/> <Action Name="Enter second operand" Type="input" Value="3"/> <Action Name="Select operator" Type="input" Value="+"/> <Action Name="Click Calculator" Type="operation"/> </Test> <Validations> <Action Name="Validate result" Type="output" Value="8"/> </Validations> </Testcase> </Testcases>
我想做的是;我想将这些操作映射到我在Objective-C中实现的方法.
比方说我有一个叫做的课; “CalculatorActions”并定义了5个方法.我想将我在xml(文本格式)中的操作映射到我在CalculatorActions中创建的方法.
例如
@interface CalculatorActions : NSObject // Property @property (strong, nonatomic) NSString* actionScript; // Actions - (void)enterFirstOperand:(double)operand; - (void)enterSecondOperand:(double)operand; - (void)selectOperator:(NSString*)operator; - (void)clickCalculate; // Validations -(void)validateResult:(NSString*)exptectedResult; @end
所以当我读取xml文件时,我想将xml文件中的操作映射到类中的相应方法.
我认为我在寻找的东西是这样的;
@interface CalculatorActions [Action("addOperand", "Enter first operand")] - (void) addOperand:(double)operand1 ToOther:(double)operand2;
最好的方法是什么?
您可以创建NSInvocation实例,设置选择器,参数以及可选地捕获返回值.您可以使用字符串创建所有这些.例如
SEL mySelector = NSSelectorFromString(@"testAddFunction"); Class MyClass = NSClassFromString(@"CalculatorActions"); NSString *myArgument = @"5"; NSInvocation *myInvocation = [NSInvocation invocationWithMethodSignature:[MyClass instanceMethodSignatureForSelector:mySelector]]; [invocation setTarget:myClass]; [invocation setSelector:mySelector]; [invocation setArgument:&myArgument atIndex:2]; [invocation invoke];
注 – setArgument:选择器接受指针地址,参数索引从2开始.