『CFURLRef path』を簡単に文字列にしたいのだが…
『iPhone』のアプリケーションをでファイルのアクセスエラーを
『printf』で出力したい!
なんて思った…。
- ( id )initWithContents:( CFURLRef )path
{
if( AudioServicesCreateSystemSoundID( path, &soundID ) != kAudioServicesNoError )
{
NSLog( @"erroe path: %@", path );
}
}
で、ログ出るけど…
『printf』が好きなんじゃい!
結構便利だしね。
じゃあどうするか…
『CFURLRef path』から直接文字列は、取れないっぽい…。
『CFStringRef』までコンバートしてさらに
メモリを確保して文字列をコピーするのに
『CFStringGetCString』を使うのを見かけるが…
こんな奴…
- ( id )initWithContents:( CFURLRef )path
{
/* 省略! */
CFStringRef a = CFURLGetString( path );
int l = CFStringGetLength( a ) + 1;
char *s = ( char* )malloc( l );
CFStringGetCString( a, s, l, kCFStringEncodingUTF8 );
printf( "erroe path: %s\n", s );
free( s );
}
でも…
もっと直接的に頂きたい!
もっと簡便に頂きたい!
もっと楽に頂きたい!
でツラツラ探していくと…。
…
どうやら『CFStringRef』までコンバートすれば、何とか成っぽい。
と言うのも『CFStringRef』は、『NSString』にキャストできるっぽい。
で、さらに『cString』で…
もとい『UTF8String』で文字列を直接引っ張り出せるっぽい…。
で、やってみた。
- ( id )initWithContents:( CFURLRef )path
{
/* 省略! */
printf( "erroe path: %s\n", [( NSString* )CFURLGetString( path ) UTF8String] );
}
おお!
出来たじゃん!
もしかしたら、当たり前なのかもしれないけど…
まだまだ初心者なんで…。
永遠の初心者…
って駄目ですか?
| 固定リンク
コメント