Dictionaryをファイルに書きだした後、値を書き換えるとクラッシュする
Dictionary を writeToFile で書きだした後、値を書き換えると EXC_BAD_ACCESS が発生してクラッシュします。
次のコードは XCode の SingleViewApplication テンプレートにボタンを追加してIBActionを設定したものですが、ボタンを2回押すと dictionary["key"] = "value"
のところでアプリがクラッシュします。
class ViewController: UIViewController {
var dictionary : [String:String] = [:]
var path: String = NSHomeDirectory()! + "/Documents/dictionary"
@IBAction func buttonAction() {
dictionary["key"] = "value"
(dictionary as NSDictionary).writeToFile(path, atomically: true)
}
}
writeToFile の行をコメントアウトするとクラッシュしないので、ファイル書き出しに関係があるかもしれませんが、いくつか奇妙な点があります。
まず、今のところ iPhone6 でしか発生していません。
確認できた範囲では次のようになりました。
- iOS8.1.3(iPhone6) : クラッシュする
- iOS7.1.2(iPhone5) : 正常
- iOS8.1(iPhone5 Simulator) : 正常
次に buttonAction() をこのように書き換えるとクラッシュしなくなります。
@IBAction func buttonAction() {
dictionary["key"] = "value"
(dictionary as NSDictionary).writeToFile(path, atomically: true)
dictionary["key"] = "value"
}
writeToFile の直後にdictionary["key"] = "value"
を足しただけですが、なぜかクラッシュしなくなります。
やりたいことはアプリのConfig情報ををファイルに保存したいだけなのですが、何か解決方法や別の方法などありませんでしょうか?