Как сохранить и повторить отчет GKAchievement после сбоя сети? - PullRequest
4 голосов
/ 16 октября 2010

Apple заявляет, что если вы хотите сообщить о достижении GKA, но получаете сетевую ошибку, лучший способ исправить это - сохранить достижение GKA (возможно, добавив его в массив), а затем периодически пытаться сообщить о достижении.

Какое лучшее место для сохранения достижений?Будет ли NSUserDefaults достаточно, или список свойств будет лучше?

Когда и как часто я должен пытаться сообщать?При запуске приложения или что-то вроде каждые 10 минут?

Ответы [ 2 ]

5 голосов
/ 17 октября 2010

Список свойств может обрабатывать только определенные классы (см. «Что такое список свойств?» ), который 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];
0 голосов
/ 23 апреля 2011

Вы можете в значительной степени сохранить что-либо в списке свойств (и, следовательно, NSUserDefaults), превратив его в NSData: archivedDataWithRootObject:

...