网络故障后如何保存并重试报告GKAchievement?
Posted
技术标签:
【中文标题】网络故障后如何保存并重试报告GKAchievement?【英文标题】:How to save and retry reporting GKAchievement's after network failure? 【发布时间】:2011-04-26 08:03:37 【问题描述】:Apple 声明,如果您想报告 GKAchievement 但遇到网络错误,处理此问题的最佳方法是保存 GKAchievement(可能将其添加到数组中),然后定期尝试报告该成就。
保存成就的最佳位置是什么? NSUserDefaults 是否足够,或者属性列表会更好吗?
我应该在何时以及多久报告一次?在应用程序启动时,还是每 10 分钟一次?
【问题讨论】:
【参考方案1】:属性列表只能处理特定的类(参见"What is a Property List?"),GKAchievement
不是其中之一。 NSUserDefaults
使用属性列表,所以也没有了。但是,GKAchievement
确实符合NSCoding
协议,这意味着您可以使用NSKeyedArchiver
轻松地将它们保存到磁盘。我会创建一个未报告的成就数组并像这样读/写它们:
//Assuming these exist
NSArray * unreportedAchievements;
NSString * savePath;
// Write to disk
[NSKeyedArchiver archiveRootObject:unreportedAchievements toFile:savePath];
// Read from disk
unreportedAchievements = [NSKeyedUnarchiver unarchiveObjectWithFile:savePath];
【讨论】:
写入总是正确注销。阅读似乎从来没有工作过。有没有其他方法可以备份阵列?【参考方案2】:您几乎可以通过将其转换为 NSData 来保存属性列表中的任何内容(以及因此 NSUserDefaults):archivedDataWithRootObject:
【讨论】:
以上是关于网络故障后如何保存并重试报告GKAchievement?的主要内容,如果未能解决你的问题,请参考以下文章
Windows 无法连接到打印机。请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开?
windows无法连接到打印机。请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开