当前位置 : 主页 > 网页制作 > xml >

如何将xml(对象)映射到Objective-C中的方法?

来源:互联网 收集:自由互联 发布时间:2021-06-13
我有一个包含结构的xml文件.在这个结构中,我有Actions节点.因此,在Actions节点下,有多个“Action”节点,每个节点都有Value和Name属性. 例如 ?xml version="1.0" encoding="ISO-8859-1"?Testcases SuiteName="Ca
我有一个包含结构的xml文件.在这个结构中,我有Actions节点.因此,在Actions节点下,有多个“Action”节点,每个节点都有Value和Name属性.

例如

<?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开始.

网友评论