Приведение CFDictionaryRef к NSDictionary? - PullRequest
38 голосов
/ 11 августа 2011

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

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

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

Приведение типа указателя без Objective C 'CFDictionaryRef *Запрещено указывать ARC * (1007 *

* 1009) от '(aka' const struct __CFDictionary ** ') до' NSDictionary * '. Что я делаю неправильно?Как мне конвертировать из CFDictionaryRef в NSDictionary?

Ответы [ 3 ]

67 голосов
/ 11 августа 2011

ARC изменил способ работы мостов.

NSDictionary *original = [NSDictionary dictionaryWithObject:@"World" forKey:@"Hello"];
CFDictionaryRef dict = (__bridge CFDictionaryRef)original;
NSDictionary *andBack = (__bridge NSDictionary*)dict;
NSLog(@"%@", andBack);
8 голосов
/ 02 июля 2013

В ARC это должно быть сделано следующим образом:

CFDictionaryRef currentListingRef = ...;
NSDictionary *currentListing = CFBridgingRelease(currentListingRef);

Это освобождает объект CF и передает владение объектом в ARC, в противном случае вы должны освободить объект CF вручную.

0 голосов
/ 28 ноября 2014

Попробуйте этот код,

NSDictionary *ssidList = (__bridge NSDictionary*)myDict;
NSString *SSID = [ssidList valueForKey:@"SSID"];
...