Besetzung von Objective-C Typ pointer 'NSString *' in C Zeiger Typ 'CFStringRef' (aka 'const struct __CFString *') erfordert eine bridged-cast
Beim umwandeln eines Objective-C-Programm, um eine Objective-C ARC, bekomme ich die Fehlermeldung:
"cast of Objective-C pointer type 'NSString *' to C pointer type 'CFStringRef' (aka 'const struct __CFString *') requires a bridged cast "
Der code ist wie folgt:
- (NSString *)_encodeString:(NSString *)string
{
NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)string, //this is line in error
NULL,
(CFStringRef)@";/?:@&=$+{}<>,",
kCFStringEncodingUTF8);
return [result autorelease];
}
Was ist ein bridged-cast?
Sie können '_bridge' oder 'CFBridgingRetain' um diesen Fehler zu beheben.
InformationsquelleAutor Michael Rowe | 2011-07-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie einen Blick auf die ARC Dokumentation auf der LLVM-Webseite. Du wirst
__bridge
oder einer der anderen Schlüsselwörter.Dies ist, weil die Core-Foundation-Objekte (VGL*Refs) sind nicht kontrolliert von ARC, nur Obj-C-Objekte sind. Also, wenn Sie konvertieren zwischen Ihnen, Sie haben zu sagen, ARC über das Objekt, das Eigentumsrecht, so kann es richtig sauber zu machen. Der einfachste Fall ist eine
__bridge
Besetzung, für die ARC wird nicht extra arbeiten (es wird vorausgesetzt, Sie behandeln den Objekt-Speicher selbst).InformationsquelleAutor jtbandes
Hier ist einen schönen ARC-tutorial, dass fand ich einfacher zu verstehen als die Apple-Dokumentation, @jtbandes Referenzen.
Werfen Sie einen Blick auf den Abschnitt mit dem Titel "Gebührenfrei bridging" im besonderen.
__bridge
Beispiele.Mike ' s Beiträge sind immer genial.
InformationsquelleAutor benvolioT
Ich weiß, dies ist ein Alter thread, ich stieß auf dieses Problem, während ich
Also was ich getan habe ist zu gehen, um Ziel - > Build-phase > Quellen Kompilieren.
Es ist Ihre Datei aufgeführt ist, doppelklicken Sie auf, und fügen Sie folgenden Zeilen weiter, um Ihre Datei.
InformationsquelleAutor Nij