問題タブ [sudzc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
web-services - SOAP リクエストは 1 つのサーバーでランダムに失敗しますが、iOS7 の別のサーバーでは機能します
SOAP リクエストでデータを取得する iPhone アプリがあります。SOAP 呼び出しは sudzc.com ライブラリによって行われます。
2 つのサーバーに SOAP リクエストを送信する必要があります。
- サーバー A : 私自身のサーバーで、いくつかの情報を取得します。自分で作成した SOAP 応答
- サーバー B : 必要な情報を提供するサードパーティのサーバー
iOS 6 アプリは 100% 正しく動作しています。
iOS7
- サーバーA:完全に機能しています
サーバー B : SOAP リクエストがランダムに失敗します。次のエラー メッセージが表示されることがあります。
< SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> < SOAP-ENV:Header/> < SOAP-ENV:Body> < SOAP-ENV:Fault > < faultcode>SOAP-ENV:Server < faultstring xml:lang="en">エンベロープにアクセスできませんでした: 指定されたソースからエンベロープを作成できません: ; 入れ子になった例外は com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: 指定されたソースからエンベロープを作成できません: : 指定されたソースからエンベロープを作成できません: : org.xml.sax.SAXParseException: 文書の前のマークアップルート要素は整形式でなければなりません: ルート要素の前にある文書内のマークアップは整形式でなければなりません。< /faultstring> < detail/> < /SOAP-ENV:Fault> < /SOAP-ENV:Body> < /SOAP-ENV:Envelope>
なぜこれがiOS7でのみ発生し、どうすればそれを取り除くことができるのでしょうか?
更新: 1 つのサーバーが https で実行され、もう 1 つのサーバーが http で実行されているという事実に関連している可能性がありますか?
- サーバー A: http://www.xxx.xy
- サーバー B: https://www.xxx.xy:443
ios - SudzC ARC バージョン - objc_msgSend 呼び出しにより、64 ビット アーキテクチャを使用して EXC_BAD_ACCESS が発生する
編集 - 以下の問題を 64 ビット対 32 ビットのアーキテクチャの問題に追跡しました...どのように解決したかについては、投稿された回答を参照してください
SudzCを使用して Web サービスの SOAP コードを生成しました。彼らは、デバイスとシミュレーターの両方で、私が正常に使用できたサンプル アプリケーションを提供します。
その後、アプリの構築を開始しました。空のアプリケーション テンプレート (CoreData と ARC が有効になっている) を使用して、SudzC で生成されたファイルを新しい XCode プロジェクトにインポートしました。
最初の SOAP リクエストを起動して実行しました。すべてがシミュレーターで動作します。次に、デバイス (iOS 7.02 を実行する iPhone 5S) で最初のテストを行いました。EXC_BAD_ACCESS
SOAP 要求が実行されるたびに、デバイスはエラーをスローします。
SoapRequest.m
これをファイル、特にconnectionDidFinishLoading
メソッドまで追跡しました。このメソッドはobjc_msgSend
呼び出しを使用して、SOAP 応答データを別のクラス (この場合はビュー コントローラー) のハンドラー メソッドに送り返します。コードは次のとおりです。
SoapRequest.m:
したがって、その行objc_msgSend(self.handler, self.action, output);
は私の問題がある場所のようです。self.handler
私のView Controllerを指しており、self.action
このメソッドを指しています:
TasksViewController.m:
このメソッドへの再エントリは、クラッシュする場所です。(id)value
が SoapRequest クラスから引き継がれていないようです。ARCによって割り当てが解除されていると思います。に置き換えて呼び出しをテストしまし(id)value
たint
:
objc_msgSend(self.handler, self.action, 1);
と
- (void)findItemHandler:(int)value
これは機能します。値変数が時期尚早に破棄されることが問題であると仮定して、それを維持するためにいくつかのことを試みました。SoapRequest.m にプロパティを追加しました。
@property (nonatomic, strong) id value;
次にそれを渡しました:
同じ問題。SoapRequest のインスタンスでも同じことを試しました...今、View Controller でプロパティを作成し、そのプロパティを値に設定することで問題を回避できましたが、これを使用してこれを修正する方法に本当に興味があります元のコード。SudzC からダウンロードしたサンプル アプリに戻って、それがどのように機能しているかを確認したところ、そのプロジェクトでは ARC が有効になっていないことがわかりました (!)。
誰か教えてください:
1)割り当てが解除されているという私の仮定が正しい場合output
、ハンドラーメソッドが不正なメモリアドレスを参照する原因になりますか?
2) これがシミュレーターで機能するのはなぜですか? これは、シムに使用可能なメモリが多く、ARC の割り当て解除にそれほど積極的ではないためだと思います...
objc_msgSend
3)通話を維持したい場合、どうすればこれを修正できますか? これがどのように/なぜ起こっているのかを知りたい
4) ここでの の使用法で SudzC が正しい場合objc_msgSend
、まれな状況を除いてこれを直接呼び出すのは悪い習慣だと理解していますか?
ありがとう!
ios - IOS で XML 応答を解析する
IOS アプリケーションを作成しています。詳細を取得するには、SOAP Webサービスを使用する必要があります。そのため、SUDZ-C を使用してスタブを生成しました。Web サービスを呼び出すことができ、応答が得られました。しかし、私は応答を解析できません。以下は XML 応答です。
誰でもこの応答を解析するのを手伝ってくれますか? これは私にとって役に立ちます。