Кастинг CFDictionaryRef в NSDictionary?
У меня есть код (урезанный):
CFDictionaryRef *currentListingRef;
//declare currentListingRef here
NSDictionary *currentListing;
currentListing = (NSDictionary *) currentListingRef;
И затем я получаю сообщение об ошибке:
Включение типа указателя не Objective-C 'CFDictionaryRef *' (aka 'const struct __CFDictionary ** ') в' NSDictionary * 'запрещен ARC
Что я делаю неправильно? Как преобразовать из CFDictionaryRef
в NSDictionary
?
Ответы
Ответ 1
ARC изменила способ работы мостов.
NSDictionary *original = [NSDictionary dictionaryWithObject:@"World" forKey:@"Hello"];
CFDictionaryRef dict = (__bridge CFDictionaryRef)original;
NSDictionary *andBack = (__bridge NSDictionary*)dict;
NSLog(@"%@", andBack);
Ответ 2
В ARC это должно быть сделано следующим образом:
CFDictionaryRef currentListingRef = ...;
NSDictionary *currentListing = CFBridgingRelease(currentListingRef);
Это освобождает объект CF и передает право собственности на объект в ARC
в противном случае вы должны освободить объект CF вручную.
Ответ 3
Попробуйте этот код,
NSDictionary *ssidList = (__bridge NSDictionary*)myDict;
NSString *SSID = [ssidList valueForKey:@"SSID"];