我在使用DiskArbitration框架時遇到了一個問題,請註冊磁盤映像掛載我註冊爲DARegisterDiskMountApprovalCallback
。問題是每次掛載磁盤映像時,都會調用兩次回調。爲什麼是這樣的,我該如何解決這個問題?安裝磁盤映像時從磁盤仲裁中進行雙重回調
2
A
回答
1
我編寫了一些東西來檢測第二個掛載並忽略它。
0
我用這些抓住了。我不確定這些與你正在做的事情有什麼不同,但他們工作。
[[[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]];
0
你把一個斷點在你的回調,看看哪些調用堆棧時,它被稱爲?它可以給你一些提示發生了什麼。
+0
大部分時間我只有一次點擊斷點.. – Nyx0uf 2010-05-26 20:50:50
+0
@Nyxem當它被擊兩次時,callstack會給你一些信息嗎? – 2010-05-26 20:55:03
1
安裝磁盤時,您經常會看到整個磁盤的事件,然後看到該磁盤上不同分區的事件。你需要區分。
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)
在你的事件處理程序,看看你會得到什麼。
相關問題
- 1. Mac OS X沙箱和磁盤仲裁
- 2. 將鉻安裝到Linux磁盤映像?
- 3. 卸載映像磁盤
- 4. 瓶 - 等到磁盤安裝
- 5. 如何知道未安裝磁盤的磁盤使用情況?
- 6. ++從磁盤
- 7. Python 2.6.6 Mac OS X安裝程序磁盤映像在哪裏?
- 8. 在磁盤上對磁盤上的值進行持久重新排序
- 9. 使用.NET創建磁盤映像
- 10. Mac OS X磁盤映像驗證
- 11. AFNetworking 3.0磁盤映像緩存
- 12. MySQL寫入映像BLOB到磁盤
- 13. 如何創建磁盤的映像?
- 14. 主磁盤與交換磁盤
- 15. 蟒蛇:從磁盤
- 16. 的System.OutOfMemoryException從磁盤
- 17. 如何從磁盤
- 18. 崩潰從磁盤
- 19. 谷歌計算引擎:磁盤快照和磁盤映像有什麼區別?
- 20. bash腳本未能安裝磁盤
- 21. 在Windows上安裝/卸載USB磁盤
- 22. CoreOS NetBoot vs安裝到磁盤
- 23. 創建新磁盤時gcloud中的磁盤類型混淆
- 24. Xcode 8 - iOS 10.0.2:安裝開發人員磁盤映像時出錯
- 25. 從Python中選擇磁盤?
- 26. MongoDB磁盤空間回收
- 27. 寫入磁盤迴調的數據
- 28. Cassandra磁盤io
- 29. 磁盤分區
- 30. 在磁盤
我不能使用NSWorkspace,它來自不是守護進程不安全的appKit,我需要將它作爲守護進程運行。 – Nyx0uf 2010-05-26 18:23:54