2014-06-17 154 views
0

在我的程序中,我使用DiskArbitration來檢查數據庫中的某些值,如果發生某些情況,請在掛載之前執行一些操作。我使用DARegisterDiskPeekCallback與此回調:從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指針,它不會讓我運行CFUUIDCreateString()。我試圖將上面的指針投射到一個CFUUIDRef指針,但我得到這個錯誤:Cast of an Objective-C pointer to 'CFUUIDRef *' ... is disallowed by ARC。如果我不嘗試投射,CFUUIDCreateString將不會接受指針。

有沒有方法可以a)將指針指向CFUUIDRef指針,或者b)獲取UUID的字符串?

+1

什麼'(CFUUIDRef)diskProps [@ 「DAVolumeUUID」]'? – trojanfoe

+0

哦,修好了!我不知道爲什麼我沒有嘗試。我認爲對Obj-C來說相對較新並不能幫助...謝謝。 – josh

回答

2

使用此代碼來代替:

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