問題タブ [external-accessory]
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.
ios - EASessionリーク
アクセサリに接続するアプリがあり、アクセサリを切断すると、アクセサリと通信するために作成した EASession がリークします。
アクセサリが接続されると、これに関する通知を受け取り、EAAccessoryManager のアクセサリ コレクションをチェックして、特定のプロトコルを使用する特定の名前のアクセサリを探します。これを見つけたら、そのアクセサリの EASession オブジェクトをコードで作成します。
通常、私は alloc と init を 1 行に持っていますが、(このように分離して) 見つけたのは、alloc が +1 の保持カウントを与えることです (ご想像のとおり) iniWithAccessory:forProtocol:
。 init メソッドからの +2 の保持カウントのみを期待します。
リークインストゥルメントもこれをサポートしているようです。
リーク計測器を段階的に見ていきます。
- +1 保持カウント ::
[???Accessory openSession]
- これは、新しい EASession を割り当てる場所です。 - +1 保持カウント ::
[EAInputStream iniWithAccessory:forSession:]
入力ストリームは、所有しているセッションへの参照を保持します。 - +1 保持カウント ::
[EAOutputStream initWithAccessory:forSession:]
出力ストリームは、所有しているセッションへの参照を保持します。 - +1 保持数 ::
[EASession iniWithAccessory:forProtocol:]
これが EASession の保持数を増やしている理由がわかりません。これは、説明できない追加の保持カウントの原因であると思います...これがどのようにバランスが取れているのかわかりません。これは Apple のバグなのかrelease
、バランスをとるために余分な時間を費やす必要があります.... 非常に奇妙です。 - -1 保持カウント ::
[EAInputStream close]
上記のステップ #2 をクリーンアップします - -1 カウントを保持 ::
[EAOutputStream close]
上記のステップ #3 をクリーンアップします - -1 カウントを保持 ::
???Accessory closeSession]
上記のステップ #1 をクリーンアップします1
だから...なぜ私はEASessionオブジェクトを漏らしているのですか? リークしないために EASession オブジェクトを使用する適切な方法は何ですか?
編集 - EADemo はリークしませんが ...
EADemoはアクセサリーに接続しますが漏れません。好奇心から[_session retain]
、インストゥルメントで malloc の履歴をたどることができるように、リークを発生させるエクストラを追加しました。私のアプリの malloc 履歴で呼び出されなかったいくつかの内部的なものを見るのは興味深いことでした。
[EAAccessoryInternal removeSession:]
これが3 回呼び出されたことがわかります。これは、アプリの malloc 履歴で呼び出されたことはありません。これが、私の EASession がリリースされない理由の鍵だと思います...
iphone - 外部デバイスからの予期しない入力 - iOS
iPod Touch (4G、jailbroken、iOS 5.0) をドッキング ステーション (Made for iPod) に接続しています。ドッキング ステーション (Made for iPod) は、ドック コネクタ経由で (ほとんどの場合、Apple アクセサリ プロトコルを使用して) コマンドを iPod に送信します。たとえば、再生の開始と停止などです。iPod はジェイルブレイクされているので、iPod に ssh 接続すると、次のようにコマンドが入ってくるのがわかります (ここでは、ドッキング ステーションの再生/一時停止ボタンを繰り返し押します。各行は 1 つのボタンを押すことに相当します)。
私が理解できないのは、ここでの入力が常に異なる理由です。同じボタンを押しているので、入力の各行が同じであることが期待されます (明らかに、最初のオフセット マーカーは無視されます)。それ以外の場合、再生/一時停止ボタンは期待どおりに機能します (このod
コマンドが実行されていない場合)。
私の質問は次のとおりですod
。リクエストを正しく表示できるようにするために、より良い呼び出し方法や別のユーティリティを使用できますか? それとも、ボーレートなどを変更する必要がありますか?
編集: ときどき、1 つのボタンを押すと、1 行ではなく 2 行の入力が表示されます。それはアライメント/バッファリングの問題でしょうか?
ios - Apple の EADemo プロジェクトを変更してバイトを表示する
EADemo がどのように機能し、外部アクセサリ フレームワークがどのように機能するかを理解しようとしています。EADemo は以下から入手できます。
私がやりたいのは、AppleのEADemoプロジェクトを変更して、受信したバイト数をカウントするだけでなく、受信したバイト数を表示することです(ASCIIタイプの文字であると仮定します)..だから私はEASessionTransferViewController.mを変更しました.
に...
しかし、これはまったく機能していません。前回試したときは何も表示されませんでした。受信したASCII文字または文字列をエコーバックするBluetoothボードに接続されていました。
誰か助けてくれませんか?
ios - iOS 用の ExternalAcessory フレームワーク: iPhone を USB デバイスとして使用する
PCまたはMacに接続して外部デバイス(MIDIコントローラーなど)として表示できるUSBデバイスとしてiphone / ipadを使用するためのExternalAccessoryフレームワークの例について、iOS SDKを調べています。
私が作成したいアプリは、ホスト (PC または Mac) に iPhone を USB または Bluetooth 経由で接続し、ホストに機能を提示する必要があります。どうすればこれを実装できますか?
iphone - プログラムで外部アクセサリが30ピンドックコネクタにあるかどうかを確認しますか?
iPhoneが充電されているかどうか、そしてどのレベルで充電されているかを確認する方法についての回答を見つけました。しかし、ドックコネクタが外部アクセサリ(充電器を含む)によって使い果たされているかどうか、またはそれが何であれ、それが何であれ、それをチェックするのはどうでしょうか。UIDeviceクラスリファレンスでその方法を見つけることができませんでした。
plist - 「サポートされている外部アクセサリ プロトコル」と xcode の info.plist
Apple の EADemo プロジェクトを読みました。それから私は自分自身を試みました。しかし、自分で作成したとき、サポートされているプロトコル文字列を配置する場所がありません。Apple の EADemo プロジェクトでは、プロジェクト情報または plist を見ると、「サポートされている外部アクセサリ プロトコル」というスポットがあります。
そのフィールドをプロジェクトに表示するにはどうすればよいですか?
ありがとう!
objective-c - 生データとしてストリームにデータを読み書きしますか?
外部アクセサリフレームワークを介して次の入力ストリームと出力ストリームを開きました。
私の初心者の質問のほとんどがそうであるように、今私は非常にばかげた質問があります。生の1バイトのデータをストリームに送信するにはどうすればよいですか?たとえば、0x06を送信します。それ、どうやったら出来るの?
そして...ストリームからデータを読み取るにはどうすればよいですか?バイトごとに処理されるデータが返送されます...バイトはバイト範囲(0x00 – 0xFF)の数値になります。
ご理解とご協力をよろしくお願いいたします。
objective-c - より多くの出力ストリームの問題...生データと奇妙な出力。私は何を間違えましたか?
Apple の外部アクセサリ フレームワークを使用して、次の入力および出力 Bluetooth ストリームを開きました。
私はこのように書いています:
私はそれから次のように読んでいます:
デバイス「AA4」から受信する必要があります。これは、最後のストリーム イベントで送信された 3 バイトが後に続く 2 つの英字を送信するためです。デバイスの LCD 画面は、2、4、および 6 を受信したことを報告しています。また、A、A、および 4 を送信したことを報告しています。しかし、"NSLog(@"readBuf: %s", readBuf); " 常に出力します:
私が間違ったことについて何か考えがある人はいますか?
ありがとう!
ios - 再投稿: iOS は、iPhone が外部アクセサリに接続されているときにアプリの自動起動を変更します
以前にこの質問をしたことがありますが、詳細が不明確または不十分であるため、クローズされました。うまくいけば、私はそれをよりよく説明しました。ここに行きます。
独自のプロトコル (iAP 経由) を使用して外部アクセサリと通信する iOS アプリケーションを構築しています。info.plist ファイルに一意のプロトコル名を追加することで、iOS デバイスが外部アクセサリに接続されたときにアプリケーションを自動的に起動できることを知っています (外部アクセサリ デバイスからのサポートも必要であることは承知しています)。
外部アクセサリと通信できるアプリケーションは、サポートする ?protocols を Info.plist ファイルで宣言する必要があります。特定のプロトコルのサポートを宣言すると、そのアクセサリが接続されたときにアプリケーションを起動できることがシステムに通知されます。接続されたアクセサリをサポートするアプリケーションがない場合、システムは App Store を起動し、対応するアプリケーションを指摘することを選択できます。
私のアプリケーションでは、アプリケーションの自動起動を有効または無効にするグラフィカル インターフェイスをユーザーに提供したいと考えています。舞台裏では、プロトコル名を事前定義された値に設定して有効にするか、クリアして無効にする必要があります。
プロトコル ID をプログラムで変更する方法について誰かが私に情報を提供してくれれば幸いです。
objective-c - Objective C - EAAccessory を NSUserDefaults に保存する
私が作成しなければならないプロジェクトでは、外部アクセサリとフレームワーク ExternalAccessory を使用しています。
(接続できるアクセサリは 1 つだけです)。
接続は簡単で、データの送信はそれほど難しくありません。
私がやりたいことの 1 つは、最後に接続されたデバイスをメモリに保存し、アプリケーションの再起動時に自動的に再接続しようとすることです。(出発後なので、最初の打ち上げ後。)
したがって、私の問題は、EAAccessory がカスタム クラス オブジェクトであり、NSUserDefaults に格納できないことです。
カスタムオブジェクトを保存するためにこの質問を見ました:
カスタムオブジェクトを NSUserDefaults に保存する方法
EAAccessory は encodeWithCoder および initWithCoder メソッドを実装していないため、それを使用して NSData を作成しますが、成功しませんでした...
何か案が ?この方法または別の方法で処理するには?