내 프로그램에서 DiskArbitration
을 사용하여 데이터베이스에 대한 일부 값을 확인하고 특정 조건이 발생하면 마운트하기 전에 수행하십시오. ,DiskArbitration CFUUID 객체에서 문자열 만들기
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
포인터보다 일반적인 포인터를 반환 :이 콜백 DARegisterDiskPeekCallback
을 사용하고 있습니다 내가 CFUUIDCreateString()
을 실행할 수 없게됩니다. 위의 포인터를 CFUUIDRef
포인터로 캐스팅하려고 시도했지만이 오류가 발생합니다 : Cast of an Objective-C pointer to 'CFUUIDRef *' ... is disallowed by ARC
. 캐스팅을 시도하지 않으면 CFUUIDCreateString
은 포인터를 허용하지 않습니다.
a) 포인터를 CFUUIDRef
포인터로 캐스트하거나 b) UUID 문자열을 가져 오는 방법이 있습니까?
무엇'[ "DAVolumeUUID"@]'(CFUUIDRef) diskProps 어떻습니까? – trojanfoe
아, 그게 다 됐습니다! 왜 내가 그걸 시도하지 않았는지 모르겠다. 비교적 Obj-C에 익숙하지 않은 것이 도움이되지 않는다고 생각합니다. 고마워요. – josh