0

在我的程序中,我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指针,因此它不允许我运行CFUUIDCreateString(). 我试图将上面的指针转换为CFUUIDRef指针,但出现此错误:Cast of an Objective-C pointer to 'CFUUIDRef *' ... is disallowed by ARC. 如果我不尝试投射,CFUUIDCreateString将不会接受指针。

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

4

1 回答 1

3

请改用此代码:

CFUUIDCreateString(nil, (CFUUIDRef)diskProps[@"DAVolumeUUID"]);
于 2014-06-17T12:29:27.267 回答