#objective-c #pointers #diskarbitration
#objective-c #указатели #дискарбитрация
Вопрос:
В моей программе я использую 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
указатель не будет принят.
Есть ли способ либо а) привести указатель к CFUUIDRef
указателю, либо б) получить строку UUID?
Комментарии:
1. О чем
(CFUUIDRef)diskProps[@"DAVolumeUUID"]
?2. О, это исправлено! Я не знаю, почему я этого не пробовал. Я думаю, что то, что я относительно новичок в Obj-C, не помогает… Спасибо.
Ответ №1:
Вместо этого используйте этот код:
CFUUIDCreateString(nil, (CFUUIDRef)diskProps[@"DAVolumeUUID"]);