Использование 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]);