Создать строку из объекта DiskArbitration CFUUID

#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"]);