2014-06-17 2 views
0

내 프로그램에서 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 문자열을 가져 오는 방법이 있습니까?

+1

무엇'[ "DAVolumeUUID"@]'(CFUUIDRef) diskProps 어떻습니까? – trojanfoe

+0

아, 그게 다 됐습니다! 왜 내가 그걸 시도하지 않았는지 모르겠다. 비교적 Obj-C에 익숙하지 않은 것이 도움이되지 않는다고 생각합니다. 고마워요. – josh

답변

2

사용이 대신 코드 :

CFUUIDCreateString(nil, (CFUUIDRef)diskProps[@"DAVolumeUUID"]); 
관련 문제