3

私は何人かの人からのスターリングデータベースの例に従いました。どちらも私にはうまくいかないようです。データベースにいくつかのものを永続化すると、デバッグ時にスターリング(エミュレーターではなく電話)を使用してすべてが明確に永続化されます。ただし、アプリを再起動すると、データベースが空になります。他の誰かが同じ問題を経験していますか?または、誰かが完全な実例を持っていますか?シリアル化と保存が機能することはわかっています...アプリを再起動しない限り、状態は機能します...

app.csのコード

    public static ISterlingDatabaseInstance Database { get; private set; }
    private static SterlingEngine _engine;
    private static SterlingDefaultLogger _logger;

    private void Application_Launching(object sender, LaunchingEventArgs e)
    {
        ActivateEngine();
    }

    // Code to execute when the application is activated (brought to foreground)
    // This code will not execute when the application is first launched
    private void Application_Activated(object sender, ActivatedEventArgs e)
    {
        ActivateEngine();
    }

    // Code to execute when the application is deactivated (sent to background)
    // This code will not execute when the application is closing
    private void Application_Deactivated(object sender, DeactivatedEventArgs e)
    {
        DeactivateEngine();
    }

    // Code to execute when the application is closing (eg, user hit Back)
    // This code will not execute when the application is deactivated
    private void Application_Closing(object sender, ClosingEventArgs e)
    {
        DeactivateEngine();
    }



    private void ActivateEngine()
    {
        _engine = new SterlingEngine();
        _logger = new SterlingDefaultLogger(SterlingLogLevel.Information);
        _engine.Activate();
        Database = _engine.SterlingDatabase.RegisterDatabase<SokobanDb>();
    }

    private void DeactivateEngine()
    {
        _logger.Detach();
        _engine.Dispose();
        Database = null;
        _engine = null;
    }

私のviewModelのコード

    public void LoadState(int level)
    {
        var levelState = App.Database.Load<LevelState>(level);
        if (levelState != null)
        {
            //TODO: check if game started, then create board from boardstring property else create new board
            //Labyrint = new Labyrint(Factory.CreateBoard());
            NewGame(level);
        }
        else
        {
            NewGame(level);
        }
    }

    public void SaveState()
    {
        var levelState = new LevelState { LevelId = _level, Moves = Labyrint.Moves, Board = Labyrint.ToString() };
        App.Database.Save(levelState);
        App.Database.Flush(); //Required to clean indexes etc.
    }
4

1 に答える 1

4

デフォルトのSterlingデータベースは、インメモリドライバーを使用します。永続化するには、分離されたストレージドライバーを渡します。ドキュメントガイドのクイックスタートによると:

https://sites.google.com/site/sterlingdatabase/sterling-user-guide/getting-started

コードは次のようになります。

_databaseInstance = _engine.SterlingDatabase.RegisterDatabase(new IsolateStorageDriver());

渡される分離ストレージドライバーのインスタンスに注意してください。これで問題ありません。

疑わしい場合は、ソースに付属の単体テストを確認してください。それらには、それを設定するためのさまざまなパターンを示すために、メモリ、分離ストレージなどの例がたくさん含まれています。

于 2012-03-23T13:21:11.157 に答える