Использование SOAP в iOS с touchXML

Я использую SOAP-платформу, сгенерированную sudz-c, кажется, что мои сервисные вызовы работают нормально, но когда я пытаюсь что-то сделать с данными, происходит сбой iOS (эмулятора).

Это сервисный звонок...

[service hentOpgaveliste:self action:@selector(handleToDoList:) userid:userNameTxt.text pdaid:[pdaIdTxt.text intValue]];

Для handleToDoList: я использую стандартный метод, представленный в примерах, который успешно NSLogs мой результат.

....
CXMLNode *xmlResult = (CXMLNode*)value;
NSLog(@"HentToDo: %@", [xmlResult description]);
....

Отсюда я получаю журнал, который вы видите ниже.

{
hentOpgavelisteResult =     {
    diffgram = "<null>";
    schema =         {
        element =             {
            complexType =                 {
                choice =                     {
                    element =                         {
                        complexType =                             {
                            sequence =                                 {
                                element = "<null>";
                            };
                        };
                    };
                };
            };
        };
    };
};

Когда я пытаюсь NSLog подсчитать количество дочерних элементов, как показано ниже, или любой другой метод экземпляра CXMLNode, я получаю следующее исключение.

....
NSLog(@"Children %@", [xmlResult childCount]);
....

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary childCount]: unrecognized selector sent to instance

Не уверен, куда идти отсюда. Я видел такие блоги , в которых обсуждались проблемы с touchXML и пространствами имен, но мне кажется, что у меня есть пространство имен.

Любые идеи будут оценены, когда дело доходит до SOAP, я нуб класс.

2 ответа

Решение

Это распространенная ошибка; при записи целых чисел вы должны использовать%i вместо%@, например так:

NSLog(@"Children %i", [xmlResult childCount]);

% @ только для регистрации объектов. Если вы попытаетесь записать целое число как объект, вы получите сбой, потому что он думает, что это указатель на случайное место в памяти, и пытается вызвать для него метод описания.

Кроме того, из полученного исключения xmlResult является NSDictionary (CFDictionary - то же самое), и в этом случае метод, который вы должны вызывать, это count, а не childCount:

NSLog(@"Children %i", [xmlResult count]);

Для печати рассчитывать..

Вы должны использовать "%d"

например:

NSLog (@ "Children count =%d", [xmlResult childCount]);

Другие вопросы по тегам