平台是 monotouch 我为 iphone 开发了一个应用程序。我有一门叫做 Globals 的课。“Globals”对象收集来自 UI 的条目和游戏期间的计算。
我计划序列化对象并将其流式传输到 txt 文件。并在游戏再次启动时恢复。(请记住,我只创建由用户终止的程序的序列化文件)
从用户终止程序的那一刻起,我使用反序列化对象继续。
这条路好吗?这是最佳做法吗?或者我需要使用其他方式来一直保存游戏信息。请为此目的发表评论或建议最佳实践。
平台是 monotouch 我为 iphone 开发了一个应用程序。我有一门叫做 Globals 的课。“Globals”对象收集来自 UI 的条目和游戏期间的计算。
我计划序列化对象并将其流式传输到 txt 文件。并在游戏再次启动时恢复。(请记住,我只创建由用户终止的程序的序列化文件)
从用户终止程序的那一刻起,我使用反序列化对象继续。
这条路好吗?这是最佳做法吗?或者我需要使用其他方式来一直保存游戏信息。请为此目的发表评论或建议最佳实践。
你真的应该尝试使用 CoreData 并从你的 Globals 对象中创建一个实体。使用 Core Data 将为您打开更多功能(例如 iCloud 同步),但您也可以在对象更改时对其进行更新。如果您不保存并且仅在应用程序终止时保存,那么您将承担丢失用户更改的风险,例如如果出现异常终止(例如崩溃)。看看核心数据。网上有很多简单的教程。这是一个:http ://www.raywenderlich.com/934/core-data-on-ios-5-tutorial-getting-started
根据数据的大小,序列化和反序列化可能会有点慢,因为一次获取整个数据。这可能适用于小数据,但本机方法如 coredata、plist、sqlite 或 NSUserDefaults 会更可接受。CoreData 和 sqlite甚至可以用于大数据。
如果您走 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);
}