0

sudz-c で生成された SOAP フレームワークを使用しています。サービス呼び出しは正常に機能しているように見えますが、データを操作しようとすると、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に関しては、私は初心者クラスです。

4

2 に答える 2

1

これはよくある間違いです。整数をログに記録するときは、次のように %@ の代わりに %i を使用する必要があります。

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

%@ はログ オブジェクト専用です。整数をオブジェクトとしてログに記録しようとすると、メモリ内のランダムな場所へのポインターであると見なされ、それに対して記述メソッドを呼び出そうとするため、クラッシュが発生します。

また、取得している例外から、xmlResult は NSDictionary (CFDictionary も同じです) です。この場合、呼び出すメソッドは、childCount ではなくカウントです。

NSLog(@"Children %i", [xmlResult count]);
于 2012-02-02T16:20:06.500 に答える
0

印刷枚数に..

「%d」を使用する必要があります

元:

NSLog(@"子の数 = %d", [xmlResult childCount]);

于 2012-02-03T09:32:50.923 に答える