Apple 表示,如果您想报告 GKAchievement 但遇到网络错误,处理此问题的最佳方法是保存 GKAchievement(可能将其添加到数组中),然后定期尝试报告成就。
保存成就的最佳位置是什么?NSUserDefaults 就足够了,还是属性列表是更好的方法?
我应该在什么时候以及多久报告一次?在应用程序启动时,还是每 10 分钟一次?
Apple 表示,如果您想报告 GKAchievement 但遇到网络错误,处理此问题的最佳方法是保存 GKAchievement(可能将其添加到数组中),然后定期尝试报告成就。
保存成就的最佳位置是什么?NSUserDefaults 就足够了,还是属性列表是更好的方法?
我应该在什么时候以及多久报告一次?在应用程序启动时,还是每 10 分钟一次?
属性列表只能处理特定的类(请参阅“什么是属性列表?”),这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];
您几乎可以通过将其转换为 NSData 来保存属性列表中的任何内容(以及因此 NSUserDefaults):archivedDataWithRootObject: