Как сопоставить XML (объекты) с методами в Objective-C? - PullRequest
4 голосов
/ 28 марта 2012

У меня есть XML-файл, который содержит структуру. В этой структуре у меня есть узел Действия.Таким образом, в узле 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;

Что было бы лучшим способом сделатьэто?

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Вы можете создать экземпляр 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.

0 голосов
/ 28 марта 2012

с некоторыми основными строковыми операциями вы можете преобразовать "Enter first operand" в NSString @"enterFirstOperand".

см. componentsSeparatedByString:, capitalizedString и - [NSArray componentsJoinedByString:]

Чем вы можете использовать NSSelectorFromString(), чтобы создать SEL (селектор). это вы можете выполнить с [self performSelector:aSelecor], [self performSelector:aSelector withObject:object afterDelay:0] или вариантами .

Чтобы проверить, работает ли определенный селектор, используйте responseToSelector:.

для самого анализа вы найдете множество постов, посвященных этому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...