Подтвердить что ты не робот

Кастинг CFDictionaryRef в NSDictionary?

У меня есть код (урезанный):

CFDictionaryRef *currentListingRef;
//declare currentListingRef here
NSDictionary *currentListing;
currentListing = (NSDictionary *) currentListingRef;

И затем я получаю сообщение об ошибке:

Включение типа указателя не Objective-C 'CFDictionaryRef *' (aka 'const struct __CFDictionary ** ') в' NSDictionary * 'запрещен ARC

Что я делаю неправильно? Как преобразовать из CFDictionaryRef в NSDictionary?

4b9b3361

Ответ 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"];