2012-02-02 2 views
0

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

Это вызов службы ...

[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 

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

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

+0

Только что нашел это на странице группы google sudz-c, в значительной степени та же проблема, что и у меня. http://groups.google.com/group/sudzc/browse_thread/thread/879451aeddc25c03?pli=1 –

ответ

1

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

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

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

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

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

childCount возвращает NSUInteger. Я все равно сделал это, в том же исключении. –

+0

NSUInteger - это то же самое целое для целей NSLog, но в любом случае я обновил свой ответ с другим исправлением, которое вам нужно сделать. –

+0

Обработка возвращенного объекта как NSDictionary достала меня где-то, спасибо! (Я бы перевел вас на ответ, но не могу в данный момент) –

0

Для Количество печати ..

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

например:

NSLog (@ "Дети Count =% D", [xmlResult ChildCount]);

Смежные вопросы