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 に答える