0

平台是 monotouch 我为 iphone 开发了一个应用程序。我有一门叫做 Globals 的课。“Globals”对象收集来自 UI 的条目和游戏期间的计算。

我计划序列化对象并将其流式传输到 txt 文件。并在游戏再次启动时恢复。(请记住,我只创建由用户终止的程序的序列化文件)

从用户终止程序的那一刻起,我使用反序列化对象继续。

这条路好吗?这是最佳做法吗?或者我需要使用其他方式来一直保存游戏信息。请为此目的发表评论或建议最佳实践。

4

3 回答 3

2

你真的应该尝试使用 CoreData 并从你的 Globals 对象中创建一个实体。使用 Core Data 将为您打开更多功能(例如 iCloud 同步),但您也可以在对象更改时对其进行更新。如果您不保存并且仅在应用程序终止时保存,那么您将承担丢失用户更改的风险,例如如果出现异常终止(例如崩溃)。看看核心数据。网上有很多简单的教程。这是一个:http ://www.raywenderlich.com/934/core-data-on-ios-5-tutorial-getting-started

于 2012-05-10T12:36:41.260 回答
2

根据数据的大小,序列化和反序列化可能会有点慢,因为一次获取​​整个数据。这可能适用于小数据,但本机方法如 coredata、plist、sqlite 或 NSUserDefaults 会更可接受。CoreData 和 sqlite甚至可以用于大数据。

Sqlite 教程

核心数据教程

NSUserdefaults 教程

于 2012-05-10T12:56:52.280 回答
2

如果您走 SQLite 路线,请查看 SQLite.Net,它将保存您现有的对象并加载它们几乎没有任何代码。

https://github.com/praeclarum/sqlite-net#readme

这是一个例子:

// Add some extra atributes as needed to your existing class.
public class Stock
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    [MaxLength(8)]
    public string Symbol { get; set; }
}

创建一个 SQLite 数据库连接并确保 Stock 类的表存在。

var db = new SQLiteConnection("foofoo");
db.CreateTable<Stock>();

将一个 Stock 实例添加到数据库中......例如......保存它!

public static void AddStock(SQLiteConnection db, string symbol) {
    var s = db.Insert(new Stock() {
        Symbol = symbol
    });
    Console.WriteLine("{0} == {1}", s.Symbol, s.Id);
}

从 DB 取回一个或多个 Stock(s)....

public static IEnumerable<Stock> QueryValuations (SQLiteConnection db, int stock)
{
    return db.Query<Stock> ("select * from Stock where StockId = ?", Id);
}
于 2012-05-10T16:32:26.570 回答