Кажется, не может быть приведен из NSString* в CFString* с использованием ARC

Я использую следующий код для получения типа файла в Objective-C (Mac OS X Cocoa Application):

NSString *kind = nil;
NSURL *url = [NSURL fileURLWithPath:[path stringByExpandingTildeInPath]];
LSCopyKindStringForURL((CFURLRef)url, (CFStringRef*)&kind);
return kind ? kind : @""; 

Тем не менее, единственная ошибка возникает в следующей строке:

LSCopyKindStringForURL((CFURLRef)url, (CFStringRef*)&kind);

Высказывание:

Приведение в стиле C от 'NSString *__strong *' к 'CFStringRef *' (он же const __CFString **') отбрасывает квалификаторы

Проведя некоторое исследование, я увидел, что __bridge ключевое слово требуется для того, чтобы преобразование из NSString * в CFStringRef * действовало в ARC. Поэтому я застрял в ключевом слове, производя:

LSCopyKindStringForURL((CFURLRef)url, (__bridge CFStringRef*)&kind);

Теперь я получаю следующую ошибку:

Приведение несовместимых типов с 'NSString *__strong *' к 'CFStringRef *' (aka 'const __CFString **') с использованием __bridge

Это начинает сводить меня с ума... что бы я ни пытался, я просто не могу исправить ошибку. Есть идеи?

2 ответа

Решение

Есть простой обходной путь. Используйте фактический CFStringRef переменная и приведение его, когда придет время вернуть его как NSString:

NSURL *url = [NSURL fileURLWithPath:[path stringByExpandingTildeInPath]];
CFStringRef kind;
LSCopyKindStringForURL((CFURLRef)url, &kind);
return kind ? CFBridgingRelease(kind) : @""; 

Я использую следующее, чтобы получить вид

    (NSURL *)path
    NSString *tempKind;
    [path getResourceValue:&tempKind forKey:NSURLLocalizedTypeDescriptionKey error:nil];
Другие вопросы по тегам