从DiskArbitration CFUUID对象创建字符串

时间:2014-06-17 12:17:10

标签: objective-c pointers diskarbitration

在我的程序中,我使用DiskArbitration检查数据库的某些值,如果发生某些情况,请在安装之前执行某些操作。我使用DARegisterDiskPeekCallback进行此回调:

DARegisterDiskPeekCallback(diskSession, kDADiskDescriptionMatchVolumeMountable, 0, determineIfNewDisk, NULL);

void determineIfNewDisk(DADiskRef disk, void* context)
{
    NSDictionary *diskProps = (__bridge NSDictionary *)DADiskCopyDescription(disk);
    CFUUIDCreateString(nil, *(CFUUIDRef *)diskProps[@"DAVolumeUUID"]);
}

我希望能够使用UUID并获取一个字符串来检查数据库,但由于diskProps[@"DAVolumeUUID"]返回一个通用指针而不是CFUUIDRef指针,它赢了&# 39; t允许我运行CFUUIDCreateString()。我试图将上面的指针强制转换为CFUUIDRef指针,但我收到此错误:Cast of an Objective-C pointer to 'CFUUIDRef *' ... is disallowed by ARC。如果我不尝试施法,CFUUIDCreateString将不接受指针。

有没有办法要么a)将指针强制转换为CFUUIDRef指针,或b)获取UUID的字符串?

1 个答案:

答案 0 :(得分:2)

请改用此代码:

CFUUIDCreateString(nil, (CFUUIDRef)diskProps[@"DAVolumeUUID"]);