ディスクの画像を取り付けるときのディスク仲裁からのダブルコールバック
-
04-10-2019 - |
質問
ディスカバイトレーションフレームワークを使用して問題があります。 DARegisterDiskMountApprovalCallback
. 。問題は、ディスクイメージがマウントされるたびに、コールバックが2回呼び出されることです。なぜそれがそして、どうすればこれを解決できますか?
解決
最終的には、2番目のマウントを検出して無視するために何かをコーディングすることになりました。
他のヒント
ディスクが取り付けられると、ディスク全体のイベントが表示され、そのディスク上の個別のパーティションのイベントが表示されます。あなたは区別する必要があります。
static void got_disk(DADiskRef disk, void *context)
{
CFDictionaryRef dict = DADiskCopyDescription(disk);
NSNumber *whole = CFDictionaryGetValue(dict, kDADiskDescriptionMediaWholeKey);
if (![whole boolValue]) {
// Handle your event only with the partition, not the "whole" disk
...
}
}
置くのはとても便利です CFShow(dict)
イベントハンドラーで、あなたが何を得るかを見てください。
コールバックにブレークポイントを入れて、呼び出されたときにコールスタックが何であるかを確認しましたか?それはあなたに何が起こっているかについてのいくつかのヒントを与えることができます。
私はこれらをキャッチします。これらがあなたがしていることとの違いはわかりませんが、彼らは働いています。
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(mediaMounted:) name:NSWorkspaceDidMountNotification object:[NSWorkspace sharedWorkspace]];
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(mediaUnmounted:) name:NSWorkspaceWillUnmountNotification object:[NSWorkspace sharedWorkspace]];
所属していません StackOverflow