2012-02-02 110 views
0

我使用的是一個sudz-c生成的SOAP框架,我的服務調用似乎工作正常,但是當我嘗試對數據做任何事情時,iOS(模擬器)崩潰。iOS中使用touchXML的SOAP使用

這是服務呼叫...

[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

剛剛在sudz-c google group頁面上發現了這個,幾乎和我一樣。 http://groups.google.com/group/sudzc/browse_thread/thread/879451aeddc25c03?pli=1 – 2012-02-02 15:27:55

回答

1

這是一個常見的錯誤;當記錄整數時,應使用%i而不是%@,如下所示:

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

%@僅用於記錄對象。如果您嘗試將整數作爲對象記錄,則會發生崩潰,因爲它認爲它是指向內存中隨機位置的指針,並嘗試調用其中的描述方法。

此外,從你所得到的例外,xmlResult是一個NSDictionary(CFDictionary是一回事),在這種情況下,你應該調用該方法是計數,不childCount:

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

childCount返回NSUInteger。 無論如何,我也給了它一個鏡頭,同樣的例外。 – 2012-02-02 19:07:54

+0

NSUInteger與NSLog的目的是相同的整數,但無論如何我已經用你需要做的另一個修復更新了我的答案。 – 2012-02-02 19:21:43

+0

將返回的對象視爲NSDictionary讓我處於某個地方,謝謝! (我會讓你回答,但不能在當前時刻) – 2012-02-03 20:16:22

0

對於印刷數..

你應該用 '%d'

例如:

的NSLog(@ 「孩子數=%d」,[xmlResult childCount]);