Objective c 在回调方法中枚举磁盘时,DiskRef消失

Objective c 在回调方法中枚举磁盘时,DiskRef消失,objective-c,diskarbitration,Objective C,Diskarbitration,我在一个正在进行的项目中使用了GitHub上项目中的DiskArbitration类 我正在通过hdiutil装载/卸载OS X安装程序磁盘映像,有时为DARegisterDiskDescriptionChangedCallback定义的回调方法在枚举时磁盘列表发生变化时崩溃,然后传递的diskref变为NULL 下面是为回调调用的get函数: DARegisterDiskDescriptionChangedCallback(session, matching, NULL, DiskDescri

我在一个正在进行的项目中使用了GitHub上项目中的DiskArbitration类

我正在通过
hdiutil
装载/卸载OS X安装程序磁盘映像,有时为
DARegisterDiskDescriptionChangedCallback定义的回调方法在枚举时磁盘列表发生变化时崩溃,然后传递的diskref变为
NULL

下面是为回调调用的get函数:

DARegisterDiskDescriptionChangedCallback(session, matching, NULL, DiskDescriptionChangedCallback, (__bridge void *)([NBCDisk class]));

...

void DiskDescriptionChangedCallback(DADiskRef diskRef, CFArrayRef keys, void *context) {
#pragma unused(keys)
    if (context != (__bridge void *)([NBCDisk class])) return;

    NSSet *uniqueDisksCopy = [uniqueDisks copy];
    for ( NBCDisk *disk in uniqueDisksCopy ) {
        if ( CFHash(diskRef) == [disk hash] ) {
            CFDictionaryRef desc = DADiskCopyDescription(diskRef);
            disk.diskDescription = desc;
            CFRelease(desc);

            [[NSNotificationCenter defaultCenter] postNotificationName:DADiskDidChangeNotification object:disk];
        }
    }
}
我通过复制并在上面枚举,解决了枚举时发生变异的问题

但是,此代码有时会在以下情况下崩溃:
“***CFHash()用NULL***”调用

这是因为磁盘消失了,
diskRef
可能已经被释放

所以,我需要一些提示。我想尝试制作一份
diskRef
的副本,并尝试这样做:

DADiskRef diskRefCopy = diskRef;
但这也不起作用。还有别的办法复印吗?或者我应该用另一种方式来处理这个问题

所以,我需要一些提示。我想试着复制一份 diskRef,并尝试通过执行以下操作:

DADiskRef diskRefCopy = diskRef;
DADiskRef diskRefCopy=diskRef

<> P>因为你与核心基金会互动;使用-

CFRetain(diskRef);
另外,请查看项目中的以下参考,第行的文件是Disk.m:

和行:



我希望有帮助!顺便说一句,不需要复制
NSSet*uniqueDisksCopy=[uniqueDisks copy]

当磁盘消失时,请确保
diskRef
已从
uniqueDisks
中删除。谢谢您的回复,这有助于我找到问题所在。
return [uniqueDisk retain];