2

起動後にCTCallCenterインスタンスを作成 (alloc/init) しました。イベント ハンドラーが呼び出されることはありません (イベントNSLogbreakpoint火事もありません)。後で現在の呼び出しについて尋ねると、nil が返されます。[[[CTCallCenter alloc] init] currentCalls]同時に呼び出すと、呼び出しが返されます。

呼び出しがアクティブなときの例として (アプリをフォアグラウンドに戻し、後でタイマーを起動しました) NSLog、長寿命のCTCallCenterインスタンス、それが currentCalls に対して返すもの、および新しい一時的なインスタンスが返すものを示す単一の例を次に示します。

CTCallCenter(0x1e5639c0): {
    server_connection: 0x1e5640e0   currentCalls: {(
)}  callEventHandler: 0xa0c90
}

(null) 

{(
    CTCall (0x1e5a0fb0) {
    callState: [CTCallStateIncoming]
    Call ID: [1EB2A082-4A12-48C2-A76C-2244F8F402EE]
}

)}

ハンドラーが登録されていることは明らかであり、長寿命のインスタンスは呼び出しがないと考えています。呼び出しリストを取得するために常に一時的なインスタンスを使用できることをうれしく思いますが、実際にはイベント ハンドラーを起動する必要があります。

4

1 に答える 1

7

私は答えを見つけました。は[[CTCallCenter alloc] init]メインキューで実行する必要があります。カスタムシリアルディスパッチキューで実行していました。おそらく、CTCallCenterコードは現在のキューで何かを実行しているか、実行ループを必要としている可能性があります。

allocメインキューの外で/を実行した場合init、currentCallsをすぐに呼び出すと正しくなりますが、そのデータは更新されず、イベントハンドラーも起動しません。ドキュメントにはこれについての言及はなく、errors返されることも例外が発生することもありません。

于 2013-02-06T12:39:50.073 に答える