Кажется, не может быть приведен из 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];