在我的程序中,我使用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的字符串?
答案 0 :(得分:2)
请改用此代码:
CFUUIDCreateString(nil, (CFUUIDRef)diskProps[@"DAVolumeUUID"]);