2013年4月22日

【iPhone】URLエンコーディング



今日はURLエンコーディングに関する簡単なメモを。


まず、今までのようにCFStringRefを使ってエンコード

+ (NSString *)urlEncode:(NSString *)url {
    return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)url, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8);
}

したら、下のようなエラーが出ました。

Cast of C pointer type 'CFStringRef' (aka 'const struct __CFString *') to Objective-C pointer type 'NSString *' requires a bridged cast

ARC使ってると出るみたいですね。なので、下のように変更

+(NSString *)urlEncode:(NSString *)url {
    return (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)url, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8);
}

__bridgeを追加しました。これだけでうまく動きます。