iOS6でCFStringTransform周りの挙動が変わった

iOS 6

iOS6で不具合に悩まされている人も多いかと思います。私もその一人です。

CFStringTransformは、文字列を全角から半角に変えたり、カタカナを平仮名に変えたりと、様々なオプションによって文字列の相互変換に使え大変便利です。

ところが、iOS6ではその挙動がおかしいというか、掴めません。

問題部分を小さくまとめたプログラム

iPhone5という文字列を全角にして、また半角に戻すという内容です。


NSMutableString *hoge = [[NSMutableString alloc] initWithFormat:@"iPhone5"];

//1: hogeを全角に変換
if(!CFStringTransform((CFMutableStringRef)hoge, NULL, kCFStringTransformFullwidthHalfwidth, YES))
{
  NSLog(@"1: error!");
}
NSLog(@"%@", hoge);

//2: 更にhogeを半角に変換
if(!CFStringTransform((CFMutableStringRef)hoge, NULL, kCFStringTransformFullwidthHalfwidth, NO))
{
  NSLog(@"2: error!");
}
NSLog(@"%@", hoge);//ここで結果が変わる

[hoge release];

求める結果は、8行目でiPhone5、15行目でiPhone5という出力。

ところが、iOS6では2回目の実行で半角に戻りません。2回ともiPhone5と出力されます。error!とも出力されていないので、実行内容自体は問題ないのではと考えています。

kCFStringTransformFullwidthHalfwidth というオプションに限らず、他でも一度変換すると再度適用すると反映されないといった、似た現象を確認しています。

これがバグなのか仕様ななのかもわかっていません。

もし使い方が間違っているよ!とか、こういう解決策があるよ!と言う方は、よろしければ、@dice_sまでお願いします。

タグ: iOS6 Xcode 開発 不具合

プロフィール
Daisuke Suzuki
ウェブサイトの制作から運営管理、アプリ開発など、様々な挑戦をして試行錯誤の日々を送っているフリーランスです。対外業務をするお仕事生活から抜け、現在は個人制作でご飯を食べています。 最近はアプリ攻略サイト AppGames を制作・公開し、そちらも手がけています。詳しいプロフィール
サイト内検索
facebook
このブログについて1
一から制作したお手製ブログ ver1.23
2012年9月11日に開始。自分で見て触って動かして、日々コツコツと調整しています。