43 votes

Conversion d'un CFDictionaryRef en NSDictionary ?

J'ai le code (dépouillé) :

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

Et ensuite j'obtiens l'erreur :

Coulée d'un pointeur de type non-Objective-C 'CFDictionaryRef *' (alias 'const struct __CFDictionary **') vers 'NSDictionary *' est interdit avec ARC

Qu'est-ce que je fais mal ? Comment puis-je convertir un CFDictionaryRef à un NSDictionary ?

75voto

Joshua Weinberg Points 22701

L'ARC a changé la façon dont les passerelles fonctionnent.

NSDictionary *original = [NSDictionary dictionaryWithObject:@"World" forKey:@"Hello"];
CFDictionaryRef dict = (__bridge CFDictionaryRef)original;
NSDictionary *andBack = (__bridge NSDictionary*)dict;
NSLog(@"%@", andBack);

9voto

Laimis Points 39

Dans l'ARC, cela devrait être fait de cette manière :

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

Ceci libère l'objet CF et transfère la propriété de l'objet à ARC sinon vous devez libérer l'objet CF manuellement.

0voto

MSA Points 136

Essayez ce code,

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X