2012年9月21日 金曜日 HOME > Objective-C
iOS6でCFStringTransform周りの挙動が変わった
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までお願いします。