問題タブ [nsstream]

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.

0 投票する
1 に答える
2482 参照

iphone - NSInputStream/NSOutputStream を使用して TCP 経由で通信する (iPhone)

iPhoneでNSInputStream/NSOutputStreamを使ってTCP通信を行うことはできますか? Apple がドキュメントで提供している例では [NSStream getStreamsToHost] を使用していますが、これは iPhone ではサポートされていません。CFStream を使用してソケットをセットアップし、NSStream にブリッジする他の投稿を見たことがありますが、サポートされている唯一の方法ですか?

ドキュメントに基づくと、理論的には次のように機能するはずです。

ただし、これには 2 つの問題があります。

1) iStream 部分だけを実行すると、デリゲートで呼び出されたイベントは表示されません。

2) outputStreamWithURL は、CFWriteStreamSetProperty 内からの不可解な「EXC_BAD_ACCESS」エラー メッセージで失敗します。

0 投票する
2 に答える
3692 参照

objective-c - scheduleInRunLoop - ネットワーク接続のスレッド化

NSStream のスレッド化プロセスを説明する適切なドキュメントは見つかりませんでした。具体的には、NSInputStream に行きましょう。私にとって Objective-C のスレッド化は、単純に見えるという理由だけで、今のところ謎です。

私の質問は主にこの行を指しています:

入力ストリームが実行される実行ループを指定できます。これは非常にクールだと思いました。問題は、入力ストリームと出力ストリームをそれぞれ独自のスレッドで実行し、両方を Connection などの単一のクラスでインスタンス化する場合、それらを独自のスレッドで実行するにはどうすればよいでしょうか?

私が尋ねる理由は、代表者のためです。以前は、着信/発信データを処理する[inputStream setDelegate:self]ことを宣言する必要がありました。stream:handleEvent

最終的に私の質問は、入力ストリームと出力ストリームをセットアップするクラスが 1 つある場合、各ストリームをスレッド化し、ストリーム イベントを処理する責任を現在のクラスに委任するにはどうすればよいですか?

ここにむさぼり食うべきいくつかのコードがあります:

私は次のことを考えています:

  • 現在のクラスの両方のスレッドの責任を委任することはできません。別のオブジェクトに委任する必要があります。
  • 1 つのスレッドで両方のストリームを処理できますか? (個人的にはそうは思いません。入出力が並行して実行されるからです)
  • 私はこれを間違って考えています。別の実行ループを作成し、別のスレッドに対して scheduleRunLoop を呼び出すことができますか?

何か案は?

0 投票する
1 に答える
3061 参照

ios - NSStreamが開くか失敗するのを待つにはどうすればよいですか?

現在、NSInputStreamを開くと(たとえば)、完全に開いたことを示すイベントを取得するように設定できます。しかし、失敗した場合、イベントはまったく発生しません。オープニングが完了しなかったとは言われません。開こうとしているときにポーリングできますが、スレッドを長時間拘束する必要があります。

私がやりたいのは、ストリームが開くか、開かないかを待つ効率的なコードを書くことです。NSStreamらを使用するそのような方法はありますか?

また、一定期間待つことができるイベントを作ることも考えました。接続が成功した場合、イベントは信号を送り、待機状態から抜け出します。タイムアウトが発生した場合は、ステータスをテストして失敗したかどうかを確認するか、再び待機状態に戻ることができます。しかしもちろん、これは計画Bであり、雄弁で効率的ではありません。そして、CocoaTouchのドキュメントを調べても、タイムアウトで待機できるようなシグナルを作成する方法がまったくわかりません。

どんな助けでもいただければ幸いです。

0 投票する
1 に答える
859 参照

objective-c - NSJSONシリアル化エラー

jsonオブジェクトをサーバーに送信しようとしています。しかし、エラーが発生し、修正できません。

これは私のホストへの接続です。

この部分はNSJSONSerialization部分です。しかし、エラーが発生しました。

私はObjective-cで新しいです。3時間問題を解決できません。

=======================================

編集:

これは私のストリームです:handleEvent:関数。

デリゲートにconnectionToHostを追加した後、この種のエラーが発生します。

今、それがバッファリングされているかどうかはわかりません

=======================EDIT2===============これについては申し訳ありません。これが原因で問題が発生する可能性があります

コードのこの部分をコピーして貼り付けるだけです。何が問題なのか!

0 投票する
1 に答える
529 参照

objective-c - NSStreamStatusを手動で変更

streamStatusを手動で変更する方法はありますか

0 投票する
1 に答える
2858 参照

objective-c - NSStreamでデリゲートを使用するにはどうすればよいですか?

私はObjective-Cの初心者です。での作業方法を学ぼうとしていNSStreamます。Appleサポートの簡単なコードを使用しました。このコードは、デスクトップのファイルからストリームを開き、デリゲートがiStreamによって呼び出されたときに簡単なメッセージを表示する必要があります。コードの最後で、ステータスが正しいことがわかりますが、デリゲートが呼び出されることはありません。私は何が欠けていますか?

0 投票する
2 に答える
116 参照

objective-c - tabBarViewでソケットストリームを管理する

UITabBarControllerを使用してアプリを開発しています。具体的には、storyBoardを使用します。すべてのタブでサーバーとデータを送受信できるようにしたいと思います。

問題は、方法がわからないことです。サーバーとの間で送受信できるのは、initNetworkCommunicationsを持つ最初のタブのみです。では、アプリが他のタブと送受信できるようにするには、どうすればよいですか?

NSNotificationCentreを使用してデータを処理することは機能することがわかりましたが、別の方法はありますか?

ソケット接続を作成するためのコードは次のとおりです

2つのタブがあるとしましょう。最初のタブには、initNetworkCommunicationを呼び出すために使用される接続ボタンがあります。このタブから、データを送受信できます。しかし、他のタブで何をしますか?この接続をリンクする方法はありますか?

お互いのコントローラーをインポートして[FirstControllersendMessage]を使用しようとしました。secondViewControllerからですが、機能していないようです。

0 投票する
1 に答える
617 参照

objective-c - メインの実行ループではないNSRunLoopでNSStreamイベントをスケジュールする

次のコードを使用して、メイン実行ループでイベントをスケジュールしています。

これは、NSStreamDelegateイベントがメインの実行ループでスケジュールされていることを意味しているため、十分な頻度でUIの応答性に影響を与える可能性があると思います。これは確かに私のプログラムの場合のようです-たとえイベントハンドラーがそれ自体で多くの作業を行わずにバックグラウンドスレッドにデタッチしたとしても。

実行ループ以外のスケジューリングについてはどうすればよいmainRunLoopですか?スレッドを作成する必要がありますか?NSRunLoopを直接作成できますか?どのようなセットアップを実行する必要がありますか?

0 投票する
1 に答える
1167 参照

ios - バックグラウンドスレッドのiOSネットワークにより、アプリケーションがハングします

ネットワークメッセージのバックグラウンドスレッドを作成するアプリケーションがあります。アプリケーションは、接続先のサーバーが接続を閉じない限り、ほぼ完全に機能します。なぜこれが起こるのかわかりませんが、アドバイスをいただければ幸いです。問題を追跡できるコードのスニペットを含めました。あいまいな点や詳細が必要な場合はお知らせください。

ハングアップは、returnnetworkThread行で発生します。その行を実行した後、アプリケーションがハングしてフリーズしているように見え、その理由に指を置くことができません。

前もって感謝します。

編集

興味のある方のためのCloseThreadのコードスニペットは次のとおりです

0 投票する
2 に答える
1360 参照

ios - NSStreamEventOpenCompleted で NSStreamDelegate をコールバックする方法は?

私はに取り組んできましたNSStreamDelegate、私はコールバックを実装しました、私はこれと同じように入力および出力ストリームを初期化しました...

両方のストリームを開いた後でも、両方のストリームに対してcallback(stream:(NSStream *)theStream handleEvent:)呼び出されませんNSStreamEventOpenCompleted。ここで何が間違っているのか、誰でも助けてくれますか。またはNSStreamEventOpenCompleted、ドキュメントで見たように、呼び出されない可能性は何ですか。開くことが失敗した場合、これは呼び出されません。そうであれば、なぜストリームを開くことが失敗するのですか。何か案が?

ご協力いただきありがとうございます。