NSUserDefaultsの保存処理でハマった

2013.07.14 Sunday 14:32
0
    NSUserDefaultsを使ったデータ保存で少しハマりました。

    基本的にリファレンスをちゃんと読んでいれば、こんなつまらないところでハマらなかったのでしょうが、一応メモとして残しておきます。



    NSUserDefaultsを使って整数型のデータを保存し、それを読むコードを書いていました。
    これをデバッガー上で動作させていました。



    
    
    - (id)init
    {
        if(self == [super init]) {
            m_userDefaults = [NSUserDefaults standardUserDefaults];
        }
    	
        return self;
    }
    
    
    // 保存
    - (BOOL) saveData:(int)val
    {
    
        [m_userDefaults setInteger:val forKey:@"KEY_DATA"];
    
        return(YES);
    }
    
    // 読み出し
    - (int) loadData 
    {
        int val = [m_userDefaults integerForKey:@"KEY_DATA"];
    
        return(val);
    }
    
    



    最初は自分が思った通りに動作していたのですが、あるタイミングでデータがうまく保存されない症状がでました。

    アプリを普通に動かしている時は全然問題ないのでが、データの保存処理を行った直後にxcode上からアプリを終了し、すぐにアプリを再起動するとデータが保存されていないことがありました。



    ……どうやらすぐに保存処理を実行して欲しい場合は、synchronizeで同期させてあげないとダメみたいですね。


    ということで、synchronizeを追加してみました。


    
    - (id)init
    {
        if(self == [super init]) {
            m_userDefaults = [NSUserDefaults standardUserDefaults];
        }
    	
        return self;
    }
    
    
    // 保存
    - (BOOL) saveData:(int)val
    {
    
        [m_userDefaults setInteger:val forKey:@"KEY_DATA"];
    
        BOOL ret = [m_userDefaults synchronize];
    
        return(ret);
    }
    
    // 読み出し
    - (int) loadData 
    {
        int val = [m_userDefaults integerForKey:@"KEY_DATA"];
    
        return(val);
    }
    


    こうすることによって、xcode上からアプリを落としても値が反映されているようになりました。

    synchronizeを省略すると、OSの都合のいいタイミングによって保存されるみたいです。
    それをxcode上からアプリを強制的に止めたものだから、保存の部分の同期処理が走っていなかったと思われます。

    つまらんところでハマってしまいました(^^;;
    category:基本文法 | by:こもcomments(0) | - | -
    ■Sponsored Link
    Comment








       

    Calender
         12
    3456789
    10111213141516
    17181920212223
    2425262728  
    << February 2019 >>
    Sponsored Link
    Selected entry
    Category
    Archives
    Recent comment
    • NSUnknownKeyExceptionが出た時の回避方法
      funakin
    • NSUnknownKeyExceptionが出た時の回避方法
      itotake
    • 画面を縦方向に固定にする
      iphone 画面 固定
    • NSUnknownKeyExceptionが出た時の回避方法
    • NSUnknownKeyExceptionが出た時の回避方法
      atsushi
    • NSUnknownKeyExceptionが出た時の回避方法
      kanejun
    • UITableViewCellに置いたボタンのイベント処理
      こも
    • UITableViewCellに置いたボタンのイベント処理
      かつお
    • NSUnknownKeyExceptionが出た時の回避方法
      こも
    • NSUnknownKeyExceptionが出た時の回避方法
       
    Sponsored Link
    Link
    Profile
    Search
    Others
    Mobile
    qrcode
    Powered
    無料ブログ作成サービス JUGEM