conversion du type de pointeur Objective-C ‘NSSsortingng *’ en type de pointeur C ‘CFSsortingngRef’ (alias ‘const struct __CFSsortingng *’) nécessite une dissortingbution pontée

Lors de la conversion d’un programme Objective-C en un Objective-C ARC, j’obtiens l’erreur suivante:

"cast of Objective-C pointer type 'NSSsortingng *' to C pointer type 'CFSsortingngRef' (aka 'const struct __CFSsortingng *') requires a bridged cast " 

Le code est comme suit:

 - (NSSsortingng *)_encodeSsortingng:(NSSsortingng *)ssortingng { NSSsortingng *result = (NSSsortingng *)CFURLCreateSsortingngByAddingPercentEscapes(NULL, (CFSsortingngRef)ssortingng, // this is line in error NULL, (CFSsortingngRef)@";/?:@&=$+{},", kCFStringEncodingUTF8); return [result autorelease]; } 

Qu’est-ce qu’un casting ponté?

Capture d'écran d'erreur

Consultez la documentation ARC sur le site Web de LLVM. Vous devrez utiliser __bridge ou l’un des autres mots-clés.

En effet, les objects Core Foundation (références CF *) ne sont pas contrôlés par ARC, seuls les objects Obj-C le sont. Donc, lorsque vous effectuez une conversion entre eux, vous devez indiquer à ARC la propriété de l’object afin de pouvoir les nettoyer correctement. Le cas le plus simple est un cast __bridge , pour lequel ARC ne fera aucun travail supplémentaire (il suppose que vous manipulez vous-même la mémoire de l’object).

Voici un bon tutoriel ARC que j’ai trouvé plus facile à comprendre que la documentation d’Apple sur laquelle @jtbandes fait référence.

Jetez un coup d’œil à la section intitulée «Passerelle sans frais» en particulier.

Je sais que c’est un vieux sujet, je suis tombé sur ce problème alors que je dois utiliser

 - (NSSsortingng *)URLEncodedSsortingng { NSSsortingng *result = (NSSsortingng *)CFURLCreateSsortingngByAddingPercentEscapes(kCFAllocatorDefault, (CFSsortingngRef)self, NULL, CFSTR("!*'();:@&=+$,/?%#[]"), kCFSsortingngEncodingUTF8); [result autorelease]; return result; } 

Donc ce que j’ai fait est d’aller à la cible> phase de construction> comstackr des sources . Votre fichier est répertorié, double-cliquez dessus et ajoutez les lignes suivantes à côté de votre fichier.

 -fno-objc-arc