11532


swiftでデータベースの検索画面を作成しています。  
UISearchBarで入力したテキストからFMDBのクエリを作成して渡しています。  
その際、データベースの中に入っている文字コードがUTF-8-MACなので、以下のような関数を作り、一旦UISearchBarのテキストを変換しています。

[code]

    func textChange(SearchBartext:NSString)->NSString{
      var bbbb:NSMutableString = SearchBartext as NSString as NSMutableString
      CFStringNormalize(bbbb, .D)
      return bbbb
    }
    
[/code]

こうすることでデータベースでもきちんと検索がかかるのですが、ARCがメモリ解放するタイミングでEXC_BAD_ACCESEで落ちてしまうのです。  
分からないのは、おそらくこの変換で影響がないであろう文字がSearchBartextに入った時にはEXC_BAD_ACCESEにならないことなのです。  
濁点・半濁点などが入ると落ちてしまいますが、それ以外のひらがなやカタカナなどでは普通に動くのです。

ご教授願います。


CC BY-SA 3.0
2015-06-19T12:39:48.737
11528
2015-06-19T13:06:55.693
10220
question
swift
SwiftでCFStringNormalizeをすると落ちてしまいます


`NSString`はimmutableなので書き換えてはいけません。  
`mutableCopy`を使って`NSMutableString`のコピーを作成してください。

[code]

    func textChange(SearchBartext:NSString)->NSString{
      var bbbb:NSMutableString = SearchBartext.mutableCopy() as! NSMutableString
      CFStringNormalize(bbbb, .D)
      return bbbb
    }
    
[/code]


CC BY-SA 3.0
2015-06-19T13:06:55.693
11532
2015-06-19T13:06:55.693
3639
11528
answer