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

时间:2012-03-28 00:10:48

标签: objective-c ios xml cocoa-touch mapping

我有一个包含结构的xml文件。在这个结构中,我有Actions节点。因此,在Actions节点下,有多个“Action”节点,每个节点都有Value和Name属性。

e.g。

<?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中创建的方法。

e.g。

@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;

最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以创建NSInvocation实例,设置选择器,参数,并可选择捕获返回值。你可以用字符串创建所有这些。

e.g。

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开始。

答案 1 :(得分:0)

通过一些基本的字符串操作,您可以将"Enter first operand"转换为NSString @"enterFirstOperand"

请参阅componentsSeparatedByString:capitalizedString-[NSArray componentsJoinedByString:]

您可以使用NSSelectorFromString()来创建SEL(选择器)。您可以使用[self performSelector:aSelecor][self performSelector:aSelector withObject:object afterDelay:0]variants执行此操作。

要检查某个选择器是否有效,请使用responseToSelector:

解析本身的

你会发现很多关于它的帖子。