6138


Dictionary を writeToFile で書きだした後、値を書き換えると EXC_BAD_ACCESS が発生してクラッシュします。  
次のコードは XCode の SingleViewApplication
テンプレートにボタンを追加してIBActionを設定したものですが、ボタンを2回押すと `dictionary["key"] = "value"`
のところでアプリがクラッシュします。

[code]

    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)
        }
    }
    
[/code]

writeToFile の行をコメントアウトするとクラッシュしないので、ファイル書き出しに関係があるかもしれませんが、いくつか奇妙な点があります。

まず、今のところ iPhone6 でしか発生していません。  
確認できた範囲では次のようになりました。

  * iOS8.1.3(iPhone6) : クラッシュする
  * iOS7.1.2(iPhone5) : 正常
  * iOS8.1(iPhone5 Simulator) : 正常

次に buttonAction() をこのように書き換えるとクラッシュしなくなります。

[code]

        @IBAction func buttonAction() {
            dictionary["key"] = "value"
            (dictionary as NSDictionary).writeToFile(path, atomically: true)
            dictionary["key"] = "value"
        }
    
[/code]

writeToFile の直後に`dictionary["key"] = "value"` を足しただけですが、なぜかクラッシュしなくなります。

やりたいことはアプリのConfig情報ををファイルに保存したいだけなのですが、何か解決方法や別の方法などありませんでしょうか？


CC BY-SA 3.0
2015-02-08T04:34:08.440
6129
2015-02-08T13:45:55.930
2015-02-08T13:45:55.930
8148
8148
question
ios swift
Dictionaryをファイルに書きだした後、値を書き換えるとクラッシュする


> (dictionary as NSDictionary).writeToFile(path, atomically: true)

これを以下に書きかえてみてください。

[code]

    let objcDictionary = NSDictionary(dictionary: dictionary)
    objcDictionary.writeToFile(path, atomically: true)
    
[/code]

いいたいのは、SwiftのDictionaryを、いったんObjective-
CのNSDictionaryにコピー（変換？）してからファイル書き出ししてみては？ということです。


CC BY-SA 3.0
2015-02-08T06:49:53.810
6138
2015-02-08T06:49:53.810
7362
6129
answer