我在使用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