网络故障后如何保存并重试报告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?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中测试可达性并重试连接?

Windows 无法连接到打印机。请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开?

windows无法连接到打印机。请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开

如何解决 Paypal 错误 - 您用于进入 PayPal 系统的链接无效。请查看链接并重试?

如何使用对话框截取未经授权的响应以输入密码并重试?

如何解决错误0x80071AC3:请运行chkdsk并重试